Aiuto con java

« Older   Newer »
  Share  
I.Ren
CAT_IMG Posted on 16/10/2011, 15:25     +1   -1




Saluti.

Ho un problema con java. Io ho questa classe:

CODICE
class SimpleCrypto {

   public static String encrypt(String seed, String cleartext) throws Exception {
           byte[] rawKey = getRawKey(seed.getBytes());
           byte[] result = encrypt(rawKey, cleartext.getBytes());
           return toHex(result);
   }
   
   public static String decrypt(String seed, String encrypted) throws Exception {
           byte[] rawKey = getRawKey(seed.getBytes());
           byte[] enc = toByte(encrypted);
           byte[] result = decrypt(rawKey, enc);
           return new String(result);
   }

   private static byte[] getRawKey(byte[] seed) throws Exception {
           KeyGenerator kgen = KeyGenerator.getInstance("AES");
           SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
           sr.setSeed(seed);
       kgen.init(128, sr); // 192 and 256 bits may not be available
       SecretKey skey = kgen.generateKey();
       byte[] raw = skey.getEncoded();
       return raw;
   }

   
   private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
       SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
           Cipher cipher = Cipher.getInstance("AES");
       cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
       byte[] encrypted = cipher.doFinal(clear);
           return encrypted;
   }

   private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
       SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
           Cipher cipher = Cipher.getInstance("AES");
       cipher.init(Cipher.DECRYPT_MODE, skeySpec);
       byte[] decrypted = cipher.doFinal(encrypted);
           return decrypted;
   }

   public static String toHex(String txt) {
           return toHex(txt.getBytes());
   }
   public static String fromHex(String hex) {
           return new String(toByte(hex));
   }
   
   public static byte[] toByte(String hexString) {
           int len = hexString.length()/2;
           byte[] result = new byte[len];
           for (int i = 0; i < len; i++)
                   result[i] = Integer.valueOf(hexString.substring(2*i, 2*i+2), 16).byteValue();
           return result;
   }

   public static String toHex(byte[] buf) {
           if (buf == null)
                   return "";
           StringBuffer result = new StringBuffer(2*buf.length);
           for (int i = 0; i < buf.length; i++) {
                   appendHex(result, buf[i]);
           }
           return result.toString();
   }
   private final static String HEX = "0123456789ABCDEF";
   private static void appendHex(StringBuffer sb, byte b) {
           sb.append(HEX.charAt((b>>4)&0x0f)).append(HEX.charAt(b&0x0f));
   }
   
}


la uso con:

CODICE
SimpleCrypto.encrypt("password","stringa")
SimpleCrypto.decrypt("password","stringa_criptata")


E con le stringhe funziona benissimo. Per criptare poi un file di testo, faccio semplicemente un operazione di lettura, di criptazione del letto e scrivere un file con le informazioni criptate. Stessa cosa per decriptare, nessun problema.

MA se io volessi criptare un file binario (tipo uno zip, un exe, un'immagine), come potrei fare? è da due giorni che cerco in internet, anche altri algoritimi, che provo a cambiare ma non è venuto fuori niente.

Quindi, arreso chiedo aiuto a voi.

Grazie mille anticipate
 
Top
»Master
CAT_IMG Posted on 16/10/2011, 17:13     +1   -1




io con java non mi ci sto :T devo impararlo per forza un'ora asd anche per fare app per android *_*
 
Top
I.Ren
CAT_IMG Posted on 16/10/2011, 17:19     +1   -1




ma non dirlo a me, io lo odio profondamente, ogni riga di codice che mi tocca scrivere mi fa schifo, leggere un programma mi fa schifo, guardare un programma finito e funzionante è bello perchè c'è la soddisfazione di averlo fatto, poi guardo il codice e mi fa schifo di nuovo D:

l'unico motivo perchè lo uso è che python per android è poco ottimizzato e non ci puoi fare le gui. Quando risolveranno sti due problemi, tanti saluti al java.
 
Top
»Master
CAT_IMG Posted on 16/10/2011, 17:21     +1   -1




personalmente missa che non lo risolveranno, java è più potente e diffuso a priori xd
 
Top
I.Ren
CAT_IMG Posted on 16/10/2011, 17:26     +1   -1




no, no lo sviluppo va avanti e anche abbastanza bene se è per quello. Ma non è una cosa ufficiale, non è fatta dalla google questa.

http://code.google.com/p/android-scripting/ guardati un po qua.
 
Top
»Master
CAT_IMG Posted on 16/10/2011, 17:30     +1   -1




ah si non ufficiale... lo dicevo perché non avevo visto niente del genere per python sul sito ufficiale proprio xD
beh, però vistoché non conosco nessuno dei due credo sia mejo andare dritto al java xd
 
Top
I.Ren
CAT_IMG Posted on 16/10/2011, 17:36     +1   -1




conviene xD ma se sistemassero n'attimo python sarebbe molto meglio quello, fidati xD
 
Top
Doch88
CAT_IMG Posted on 25/10/2011, 16:32     +1   -1




Uhm, sinceramente non ho mai aperto un file in binary mode con Java, non saprei aiutarti.

Hai provato a vedere se qui c'è qualcosa?
 
Top
I.Ren
CAT_IMG Posted on 25/10/2011, 19:58     +1   -1




aprire un file e leggere le informazioni binarie ce la fo, non è quello il problema. Il punto sta nel modificare la classe in modo che possa criptarmi anche informazioni binarie e non solo stringhe.

PS: cmq leggere e scrivere file su android è tutto un casino, fra permessi e tutto. Sarà che poi in java ci sono 80 modi diversi di farlo e su android solo uno funziona, quindi ora che lo trovi ci metti anni.
PPS: grazie : D
 
Top
8 replies since 16/10/2011, 15:25   79 views
  Share