Ayuda Cifrado ARC4/RC4 en Java

Iniciado por BloodSharp, 26 Febrero 2014, 05:03 AM

0 Miembros y 1 Visitante están viendo este tema.

BloodSharp

Buenas, quería saber si alguién me podría dar una mano. Estaba armando un código para cifrar un archivo cualquiera mediante RC4, el problema es que me genera una excepción (ArrayIndexOutOfBoundException) cuando intento ejecutarlo lo cual es raro ya que pude ejecutar el mismo código ligeramente modificado en C++(WINAPI) y C#... Si alguien me dá una mano se lo agradecería.

Código (java) [Seleccionar]
   private byte[] RC4(byte[] szBuf,byte[] szKey,int dwBufLen,int dwKeyLen){
       int i,j=0;
       int []s=new int[256];
int dw;
byte tmp;
byte[] Buf=szBuf;
byte[] Key=szKey;
for(i=0;i<256;i++){
           s[i]=i;
}
for(i=0;i<256;i++){
           j=(j+s[i]+Key[i%dwKeyLen])%256;
           tmp=(byte)s[i];
           s[i]=s[j];
           s[j]=(int)tmp;
}
for(dw=0;dw<dwBufLen;dw++){
           i=(i+1)%256;
           j=(j+s[i])%256;
           tmp=(byte)s[i];
           s[i]=s[j];
           s[j]=(int)tmp;
           Buf[dw]^=(byte)s[(s[i]+s[j])%256];
       }
return Buf;
   }
   private void btnCifrarActionPerformed(java.awt.event.ActionEvent evt) {                                          
       if(txtArchivo.getText().length()==0)
           JOptionPane.showMessageDialog(this,"No hay Archivo, seleccione uno...","RC4 para Archivos - BloodSharp",JOptionPane.ERROR_MESSAGE);
       else if(txtPassword.getText().length()==0)
           JOptionPane.showMessageDialog(this,"Escriba una contraseña...","RC4 para Archivos - BloodSharp",JOptionPane.ERROR_MESSAGE);
       else{
           try{
               File file=new File(txtArchivo.getText());
               int longitud=(int)file.length();
               byte[] Bytes=new byte[longitud];
               FileInputStream fileInput=new FileInputStream(file);
               BufferedInputStream bufferedInput = new BufferedInputStream(fileInput);
               
               bufferedInput.read(Bytes,0,longitud);
               Bytes=RC4(Bytes,txtPassword.getText().getBytes(),longitud,txtPassword.getText().length());
               fileInput.close();
               bufferedInput.close();
               
               FileOutputStream fileOutput=new FileOutputStream(file);
               BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutput);
               bufferedOutput.write(Bytes,0,longitud);
               fileOutput.close();
               bufferedOutput.close();
               
               JOptionPane.showMessageDialog(this,"El archivo "+txtArchivo.getText()+" fue Cifrado/Descifrado","RC4 para Archivos - BloodSharp",JOptionPane.INFORMATION_MESSAGE);
           }
           catch(Exception e){
               JOptionPane.showMessageDialog(this,e.getClass().toString()+" "+e.getMessage(),"RC4 para Archivos - BloodSharp",JOptionPane.ERROR_MESSAGE);
           }
       }
   }


PS: El código de RC4 lo saque del foro: http://foro.elhacker.net/programacion_cc/encriptacion_rc4arc4-t210711.0.html;msg1000447#msg1000447

B#



Gh057

hola IEAX, por favor fíjate esta implementación del algoritmo rc4 y los comentarios sobre las excepciones en java a nivel byte:

-> http://stackoverflow.com/questions/12289717/rc4-encryption-java

espero que te sea útil. saludos.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

BloodSharp

#2
Cita de: Gh057 en 26 Febrero 2014, 11:51 AM
hola IEAX, por favor fíjate esta implementación del algoritmo rc4 y los comentarios sobre las excepciones en java a nivel byte:

-> http://stackoverflow.com/questions/12289717/rc4-encryption-java

espero que te sea útil. saludos.

Lo he leído e intentado de esa manera, pero al final el archivo cifrado queda totalmente vacío... He también analizado el código y hace prácticamente lo mismo pero en lugar de x % 256 usan x & 0xFF lo cuál termina dando todo completamente distinto el resultado... Igual gracias por la respuesta  ;D

EDIT: Ya lo pude solucionar el problema del archivo vacío y funciona perfectamente el cifrado ahora...


B#



Gh057

4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...