elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Temas
Páginas: [1]
1  Programación / PHP / Tipo de redireccionamiento en Acortadores de Enlaces en: 2 Mayo 2011, 02:34 am
Hola, que tal, estoy programando un acortador de enlaces personalizado, tipo goo.gl, tinyurl y bit.ly, estoy usando php+mysql.

Bueno ya he avanzado gran parte del código, solo que he llegado a un punto donde me estancado, en algo que pense en su momento era relativamente fácil.

La parte del código en cuestión es cuando redirecciona al enlace original, el problema es que para los enlaces que tienen la ruta de un archivo de descarga (como megaupload, mediafire,etc ) no me funciona en los gestores de descarga.

Por ejemplo:
La direccion acortada para este enlace:
Código:
http://www.megaupload.com/?d=H4N9E047

Usando los acortadores previamente mencionados:
Código:
http://bit.ly/krcPcS
http://goo.gl/z5gIS
http://tinyurl.com/3vqg3bx

Al agregarla a un gestor de descarga, por ejemplo el jdownloader , el enlace es reconocido sin problemas.
Lo curioso es que abajo en el JD sale un mensaje: "decrypt-redirecter services: /"



Y cuando lo hago desde mi código, me sale lo siguiente:



Mi código es el siguiente, bueno las partes importantes:

Código
  1. // .htaccess
  2. RewriteEngine On
  3. RewriteRule ^([0-9a-zA-Z]+)$ index.php?id=$1 [L]



Código
  1. <?php
  2.  
  3. // index.php, la parte donde redirecciono
  4.  
  5. //Obtengo el enlace de la DB ...
  6.  
  7. $url = 'http://www.megaupload.com/?d=H4N9E047';
  8.  
  9. header('HTTP/1.1 301 Moved Permanently');    
  10. header('Location: '.$url);
  11. exit(0);
  12. ?>


Resumiento, alguien conoce el posible modo de redireccionamiento que usan dichos acortadores de enlaces??

Ojala alguien pueda ayudarme, cualquier ayuda sera bien recibida.

Saludos
2  Programación / Java / Algoritmo en Java [SOLUCIONADO] en: 18 Octubre 2007, 00:14 am
Pues aqui un ejercicio que me tomaron en una calificada de Progra (no se donde diablos el profe saco este problema), muy tedioso, ya lo he solucionado, pero quisiera saber si alguno de ustds podria hacerlo de una manera diferente o en todo caso mas eficiente, en fin como para que practiques.  ;)

Citar

PRACTICA CALIFICADA DE PROGRAMACION

La situacion del ejercito aliado es desesperada.El ejercito de Adolf Hitler amenza con adueñarse definitivamente de Europa y comenzar su expansion por el mundo.Sus comunicaciones, ademas, estan cifradas con una poderosa máquina llamada ENIMGMA, que desafia toda intercepcepcion.

En BletChley Par, las mentes más poderosas del mundo libre se han reunido en secreto para tratar de encontrar la forma de romper los codigos alemanes.Han conseguido comprender el funcionamiento de ENIGMA, pero no resulta viable descifrar los mensajes manualmente.Para dificultar las cosas los mensajes alemanes originales estan escritor en español.

En un proyecto ultrasecreto, un grupo de fisicos aliados consiguen secuestrar a un programador español del siglo XXI con su máquina de computo (o sea tú). Su única esperanza es que este individuo los ayude a descifrar los mensajes alemantes, antes de que sea demasiado tarde...

Los mensajes alemanes utilizan el juego de 29 carácteres siguientes, codificados a partir de 0(los tres últimos son el espacio, el punto y la coma).

A B C D E F G H I  J  K  L   M   N   O   P   Q   R   S  T   U   V  W  X   Y   Z       .    ,
0 1 2  3  4 5 6 7 8 9 10 11 12  13  14  15 16  17 18 19 20 21 22 23 24 25 26 27 28

La máquina enigma tiene ruedas con esta secuencia de caracteres igual que el cuentakilometros de un auto,tiene ruedas con los digitos del 0 al 9. Si una rueda esta en la posicion A y se avanza 1, pasara a B; si avanza 29 pasos, volvera a la posicion A.

Tras traducirlo al español, lo primero que hacen  los alemanes para codificar un mensaje es elegir una secuencia especial de 5 letras, que hara de semilla.Colocan esta secuencia al principio y el mensaje inmediatamente a continuacion.

EJEMPLO:

Supongase el mensaje MATAR A LOS HUMANOS

Para codificarlos, Enigma podia enteponder una semilla cualquiera, por ejemplo RUDER preparando el mensaje asi:

RUDERMATAR A LOS HUMANOS


Se multiplican y suman los codigos de RUDER (que son 17,20,3,4,17); por tanto tenemeros:
(17x20x3x4x17 + 17+20+3+4+17), y ese (69421 en este caso) es el numero de pasos que avanzará la rueda de la M. Eso nos lleva a la H. Por tanto, el mensaje pasa a ser:

RUDERHATAR A LOS HUMANOS

La misma operacion se haria para la A, con los codigos de las letras UDERH. Y así sucesivamente. Eso nos llevaría al mensaje codificado:

RUDERHRML.EMG,AKYRMRNGNU

Hay que realizar un programa que lea cadenas de textos y los alamcene en un vector(siempre limitando a los caracteres mencionados arriba)con un mensaje codificado, y grabe en otro vector dichos mensajes codificados.EL programa tendra que realizar los cáclculos segun la "codificacion alemana".


Y aqui mi solucion:

Código
  1. /**
  2.  * @(#)codificados.java
  3.  *
  4.  * @author  JEANS AZULF RUIZ
  5.  * @version 1.00 2007/6/8
  6.  */
  7. import java.awt.*;
  8. import javax.swing.*;
  9. import java.awt.event.*;
  10. import java.util.*;
  11. public class codificados extends JFrame implements ActionListener{
  12.  
  13.    JLabel label;
  14.    JTextField texto;
  15.    JTextArea area,area2;
  16.    JButton b_deco;
  17.   char Arreglo[]=new char[29];
  18.  
  19.   Vector codi=new Vector();
  20.   Vector deco=new Vector();
  21.  
  22.    public codificados() {
  23.  
  24.     label =new JLabel("Ingrese aqui Texo Codificado");
  25.     texto=new JTextField();
  26.  
  27.     texto.addKeyListener(new ValidaNumero() );
  28.  
  29.     area=new JTextArea();
  30.     area.setEditable(false);
  31.     area.setToolTipText("Esta ***** no se Edita");
  32.     area2=new JTextArea();
  33.     area2.setEditable(false);
  34.     area2.setToolTipText("Esta ***** no se Edita");
  35.  
  36.     b_deco=new JButton("Decodificalo!!!");
  37.  
  38.     JPanel panel=new JPanel( new GridLayout(1,2) );
  39.     panel.add(label);
  40.     panel.add(texto);
  41.  
  42.     JPanel panel2=new JPanel(new GridLayout(1,2) );
  43.  
  44.     JPanel sub_panel= new JPanel(new BorderLayout() );
  45.     sub_panel.setBorder(BorderFactory.createTitledBorder("Textos Codificados... :"));
  46.     sub_panel.add(new JScrollPane(area) ,BorderLayout.CENTER);
  47.  
  48.  
  49.     JPanel sub_panel2=new JPanel(new BorderLayout() );
  50.     sub_panel2.setBorder(BorderFactory.createTitledBorder("Textos Decodificados... :"));
  51.     sub_panel2.add(new JScrollPane(area2),BorderLayout.CENTER);
  52.  
  53.     panel2.add(sub_panel);
  54.     panel2.add(sub_panel2);
  55.  
  56.     add(panel,BorderLayout.NORTH);
  57.     add(panel2,BorderLayout.CENTER);
  58.     add(b_deco,BorderLayout.SOUTH);
  59.  
  60.     b_deco.addActionListener(this);
  61.  
  62.     iniciar();
  63.  
  64.     setTitle(".::CODIFICADOS::.");
  65.     setSize(450,300);
  66.     setLocation(300,300);
  67.     setResizable(false);
  68.     setDefaultCloseOperation(EXIT_ON_CLOSE);
  69.     setVisible(true);
  70.    }
  71.  
  72.    public void actionPerformed(ActionEvent e){
  73.     if(b_deco==e.getSource()){
  74.     if( texto.getText().length()<=5 ) JOptionPane.showMessageDialog(this,"Por favor ingrese Texto a decodificar VALIDO.\nRecuerde que el texto debe tener mas de 5 caracteres","Title",JOptionPane.INFORMATION_MESSAGE);
  75.     else decodificar();
  76.     }
  77.    }
  78.  
  79.  
  80.    public void iniciar(){
  81.     for (int i = 0; i<26; i++)
  82.     Arreglo[ i ]=(char)(i+65) ;
  83.  
  84.    Arreglo[26]=(char)(32) ;
  85.    Arreglo[27]=(char)(46) ;
  86.    Arreglo[28]=(char)(44) ;
  87.  
  88.    System.out.println(Arrays.toString(Arreglo) );
  89.    }
  90.  
  91.    public int buscar(char car){
  92.     for(int i=0;i<Arreglo.length;i++ )
  93.     if( Arreglo[ i ]==car  ) return i;
  94.     return (-1);
  95.    }
  96.  
  97.    public void decodificar(){
  98.  
  99.     //Creo mi arreglo con la longitud del texto menos los 05 caractereres que son los que han servido de semilla
  100.     char arreglo[]=new char[ ( texto.getText().length() ) -5 ];
  101.  
  102.     //agrego al vector
  103.     codi.addElement( texto.getText().toUpperCase() );
  104.  
  105.     String N=texto.getText().toUpperCase();
  106.     int tope= N.length()-5;
  107.     for(int i=0;i<tope;i++){
  108.     //formo la subcadena que contiene los numeros antecesores
  109.     String n= N.substring(tope-i-1 , tope+5-i-1);
  110.  
  111.  
  112.     //multiplico los digitos
  113.     int Pro=1;
  114.     int Sum=0;
  115.  
  116.     for(int j=0;j<n.length();j++ ){
  117.     Pro*= buscar(n.charAt(j));
  118.     Sum+= buscar(n.charAt(j));
  119.     }
  120.     Pro+=Sum;
  121.     //obtengo el residuo
  122.     Pro=(Pro%29);
  123.  
  124.  
  125.     int t=0,k=0;
  126.     int resi= buscar( N.charAt(N.length()-1-i ) );
  127.  
  128.     do{
  129.     t= (29*k)+ resi;
  130.     k++;
  131.     }while(Pro>t);
  132.  
  133.     arreglo[arreglo.length-i-1]= Arreglo[t-Pro];
  134.  
  135.     }
  136.  
  137.     String s_deco=new String(arreglo);
  138.     //agrego al otro vector
  139.     deco.addElement(s_deco);
  140.     String s_codi=new String();
  141.     String s_decodi=new String();
  142.     for(int h=0;h<deco.size();h++ ){
  143.     s_codi+=(String)codi.elementAt(h);
  144.     s_decodi+= (String)deco.elementAt(h);
  145.     s_codi+="\n";
  146.     s_decodi+="\n";
  147.     }
  148.  
  149.     area.setText(s_codi);
  150.     area2.setText(s_decodi);
  151.  
  152.     texto.setText("");
  153.    }
  154.  
  155.    //clase para que la caja de texto solo acepte LETRAS
  156. class ValidaNumero extends KeyAdapter {
  157.  public void keyTyped(KeyEvent e) {
  158.      char c = e.getKeyChar();
  159.      if ( !(!Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) ||(c == KeyEvent.VK_DELETE)) ) {
  160.            getToolkit().beep();
  161.            e.consume();
  162.      }
  163.  
  164.      if(c==KeyEvent.VK_ENTER ){
  165.       if( texto.getText().length()<=5 ) JOptionPane.showMessageDialog(null,"Por favor ingrese Texto a decodificar VALIDO.\nRecuerde que el texto debe tener mas de 5 caracteres","Title",JOptionPane.INFORMATION_MESSAGE);
  166.     else decodificar();
  167.  
  168.      }
  169.  
  170.  }
  171. }
  172.  
  173.  
  174.  
  175.    public static void main(String[] args) {
  176.       new codificados();
  177.    }
  178. }
  179.  


Y aparte de decodificar los mensajes, para verificiar que estaba en lo correcto, tuve que hacer otra aplicacion en la cual me codificara los mensajes, que es esta:

Código
  1. /**
  2.  * @(#)decodificados.java
  3.  *
  4.  * @author JEANS AZULF RUIZ
  5.  * @version 1.00 2007/6/8
  6.  *
  7.  * APLICACION EN JAVA QUE ME VA A CODIFICAR MENSAJES,PARA LUEGO UTILIZARLOS EN LA OTRA APLICACION
  8.  */
  9. import java.awt.*;
  10. import javax.swing.*;
  11. import java.awt.event.*;
  12. import java.util.*;
  13. public class decodificados extends JFrame implements ActionListener{
  14.  
  15.    JLabel label;
  16.    JTextField texto;
  17.    JTextArea area,area2;
  18.    JButton b_deco;
  19.   char Arreglo[]=new char[29];
  20.  
  21.    public decodificados() {
  22.     crea_objetos();
  23.     agrega_objetos();
  24.     listar_objetos();
  25.     propiedades_ventana();
  26.    }
  27.  
  28.    public void crea_objetos(){
  29.  
  30.     label =new JLabel("Ingrese aqui Texo A codificar");
  31.     texto=new JTextField();
  32.  
  33.     area=new JTextArea();
  34.     area.setEditable(false);
  35.     area.setToolTipText("Esta ***** no se Edita");
  36.  
  37.     area2=new JTextArea();
  38.     area2.setEditable(false);
  39.     area2.setToolTipText("Esta ***** no se Edita");
  40.  
  41.     b_deco=new JButton("Codificalo!!!");
  42.    }
  43.  
  44.    public void agrega_objetos(){
  45.     JPanel panel=new JPanel( new GridLayout(1,2) );
  46.     panel.add(label);
  47.     panel.add(texto);
  48.  
  49.     JPanel panel2=new JPanel(new GridLayout(1,2) );
  50.  
  51.     JPanel sub_panel= new JPanel(new BorderLayout() );
  52.     sub_panel.setBorder(BorderFactory.createTitledBorder("Textos Sin Codificar... :"));
  53.     sub_panel.add(new JScrollPane(area) ,BorderLayout.CENTER);
  54.  
  55.     JPanel sub_panel2=new JPanel(new BorderLayout() );
  56.     sub_panel2.setBorder(BorderFactory.createTitledBorder("Textos Codificados... :"));
  57.     sub_panel2.add(new JScrollPane(area2),BorderLayout.CENTER);
  58.  
  59.     panel2.add(sub_panel);
  60.     panel2.add(sub_panel2);
  61.  
  62.     add(panel,BorderLayout.NORTH);
  63.     add(panel2,BorderLayout.CENTER);
  64.     add(b_deco,BorderLayout.SOUTH);
  65.    }
  66.  
  67.    public void listar_objetos(){
  68.     b_deco.addActionListener(this);
  69.     texto.addKeyListener(new ValidaNumero() );
  70.     iniciar();
  71.    }
  72.  
  73.    public void propiedades_ventana(){
  74.     setTitle(".::DECODIFICADOS::.");
  75.     setSize(450,300);
  76.     setLocation(300,300);
  77.     setResizable(false);
  78.     setDefaultCloseOperation(EXIT_ON_CLOSE);
  79.     setVisible(true);
  80.    }
  81.  
  82.  
  83.    public void actionPerformed(ActionEvent e){    
  84.     if(b_deco==e.getSource()){
  85.     if(texto.getText().length()<=5) JOptionPane.showMessageDialog(this,"Por favor ingrese datos validos");
  86.     else codificar();
  87.     }    
  88.    }
  89.  
  90.  
  91.  
  92.    //METODO QUE ME PERMITE CODIFICAR LAS CADENAS
  93.    public void codificar(){
  94.     String semilla=crea_semilla();
  95.     String cadena= ( texto.getText() ).toUpperCase();
  96.     int limite=cadena.length() ;
  97.  
  98.     cadena= semilla.concat(cadena);
  99.     String cadena_codificada=new String(semilla);
  100.  
  101.     for(int i=0;i<limite;i++){
  102.     String sub= cadena_codificada.substring(i,i+5);
  103.     int suma=0,produc=1;
  104.     for(int j=0;j<5;j++){
  105.     suma+= buscar(sub.charAt(j) );
  106.     produc*= buscar(sub.charAt(j) );
  107.     }
  108.     suma+=produc;
  109.     suma%=29;
  110.     int tempo= suma+ buscar(cadena.charAt(i+5));
  111.     int resul=tempo%29;
  112.     cadena_codificada+=String.valueOf(Arreglo[resul]);
  113.     }
  114.  
  115.     area.append( (texto.getText()).toUpperCase() +"\n" );
  116.     area2.append(cadena_codificada +"\n" );
  117.     texto.setText("");
  118.    }
  119.  
  120.  
  121.  
  122.    public void iniciar(){
  123.     for (int i = 0; i<26; i++)
  124.     Arreglo[ i ]=(char)(i+65) ;
  125.  
  126.    Arreglo[26]=(char)(32) ;
  127.    Arreglo[27]=(char)(46) ;
  128.    Arreglo[28]=(char)(44) ;
  129.  
  130.    System.out.println(Arrays.toString(Arreglo) );
  131.    }
  132.  
  133.    public int buscar(char car){
  134.     for(int i=0;i<Arreglo.length;i++ )
  135.     if( Arreglo[ i ]==car  ) return i;
  136.     return (-1);
  137.    }
  138.  
  139.  
  140.    //clase para que la caja de texto solo acepte LETRAS
  141. class ValidaNumero extends KeyAdapter {
  142.  public void keyTyped(KeyEvent e) {
  143.      char c = e.getKeyChar();
  144.      if (!( !Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) ||(c == KeyEvent.VK_DELETE)) ) {
  145.            getToolkit().beep();
  146.            e.consume();
  147.      }
  148.  
  149.      if(c==KeyEvent.VK_ENTER ){
  150.       if(texto.getText().length()<=5) JOptionPane.showMessageDialog(null,"Por favor ingrese datos validos");
  151.     else codificar();      
  152.      }
  153.  
  154.  }
  155. }
  156.  
  157.  
  158. /* A ----> 65
  159.     * Z ----> 90
  160.     * ESTE METODO CREA UNA SEMILLA  AL AZAR DE CINCO CARACTERES PARA UN TEXTO QUE SE VA A CODIFICAR*/
  161.    public  String crea_semilla(){
  162.   int temporal=0;
  163.       int k=0;
  164.       String cadena="";
  165.       do{
  166.       temporal=(int)(Math.random()*91);
  167.       if(temporal>=65 && temporal <=90){
  168.       //char tmp= (char)temporal;
  169.       cadena+=String.valueOf( (char)temporal);
  170.       k++;
  171.       }
  172.       }
  173.       while(k!=5);
  174.       return cadena;
  175. }
  176.  
  177.  
  178.  
  179.  
  180. // EL MAIN    
  181.    public static void main(String[] args) {
  182.       new decodificados();
  183.  
  184.  
  185.  
  186.    }
  187. }
  188.  
  189.  

Pd: me falto validar para cuando el usuario ingrese caracteres como : "  "" ! · $ % & / () = ? ¿ etc."

Si crees que ya lo haz terminado, puedes probar con estos codigos, o en todo caso codicarlos con la segunda aplicacion, esa que se llama decodificados

Citar
MATAR A LOS HUMANOS          WCNBIXRAU. DPVFHF.ON,GYY
ENCONTRAR EL TESORO          JRHOAWPCJD UKJSIQKDOFWQP
APAGA EL COMPUTADOR         WJVASMRKFFG.WQMOG,FDORUU
QUITATE LAS MEDIAS             NTJSE THR.WYAOAU OUZEPC
ROMPE LA VENTANA                VGVYWIYB,KERSOZH,EWLY


Saludos

Azulf
3  Programación / Java / [mod] validación de tipos de datos en un formulario en: 26 Mayo 2007, 23:09 pm
Buen dia amigos de elhacker.net, bueno tengo un problema con java , a continuacion se lo describo y de antemano agradezco por su atencion.

Lo que pasa es que estoy llevando interfaz grafica, swing y esas cosas, contenedores, administradores de diseño, botones, cajas de texto, cuadros para llenar entradas, etc..., lo que pasa es que en las cajas de texto y en los cuadros para llenar entradas(JOptionPane.showInputDialog), nu se como validar datos, es decir, por ejemplo tengo un formulario donde se ingresa la edad de una persona, y que pasa si ingreso 'abc', o tengo que sumar dos numeros y ingreso un caracter, pucha lo que pasa es que el profe lo primero que revisa es eso, las validaciones, n.n u.u espero que me ayuden,

Editado por el moderador: "Ayuda :(" no es un título descriptivo para ningún post, por favor revisa las normas del foro y la sección.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines