Criptare e decodificare una stringa in java

Sono nuovo della crittografia. Vorrei sapere come crittografare e decifrare il testo in un file … quando rimando gli articoli correlati in rete. Avevo il dubbio che il testo cifrato sia lo stesso per il singolo testo quando la crittografia viene eseguita più volte sullo stesso testo? Qualcuno può chiarire il mio dubbio?

public String encrypt(String str) { try { // Encode the string into bytes using utf-8 byte[] utf8 = str.getBytes("UTF8"); // Encrypt byte[] enc = ecipher.doFinal(utf8); // Encode bytes to base64 to get a string return new sun.misc.BASE64Encoder().encode(enc); } catch (javax.crypto.BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } catch (java.io.IOException e) { } return null; } public String decrypt(String str) { try { // Decode base64 to get bytes byte[] dec = new sun.misc.BASE64Decoder().decodeBuffer(str); // Decrypt byte[] utf8 = dcipher.doFinal(dec); // Decode using utf-8 return new String(utf8, "UTF8"); } catch (javax.crypto.BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } catch (java.io.IOException e) { } return null; } } 

Ecco un esempio che utilizza la class:

 try { // Generate a temporary key. In practice, you would save this key. // See also Encrypting with DES Using a Pass Phrase. SecretKey key = KeyGenerator.getInstance("DES").generateKey(); // Create encrypter/decrypter class DesEncrypter encrypter = new DesEncrypter(key); // Encrypt String encrypted = encrypter.encrypt("Don't tell anybody!"); // Decrypt String decrypted = encrypter.decrypt(encrypted); } catch (Exception e) { } 

Avevo dubbi sul fatto che il testo crittografato sarà lo stesso per il singolo testo quando la crittografia viene eseguita più volte su uno stesso testo ??

Questo dipende fortemente dall’algoritmo crittografico che usi:

  • Uno degli obiettivi di alcuni / più (maturi) algoritmi è che il testo crittografato è diverso quando la crittografia viene eseguita due volte. Una ragione per farlo è che un utente malintenzionato non è in grado di calcolare la chiave in modo chiaro.
  • Altro algoritmo (principalmente hashing di crypto unidirezionale) come MD5 o SHA basato sul fatto che il testo hash è lo stesso per ogni crittografia / hash.

Sia la crittografia sia la stessa cosa quando il testo semplice è crittografato con la stessa chiave dipende dall’algoritmo e dal protocollo. Nella crittografia è presente il vettore di inizializzazione IV: http://en.wikipedia.org/wiki/Initialization_vector utilizzato con vari codici rende lo stesso testo semplice crittografato con la stessa chiave che fornisce vari testi di crittografia.

Vi consiglio di leggere di più sulla crittografia su Wikipedia, Bruce Schneier http://www.schneier.com/books.html e “Beginning Cryptography with Java” di David Hook. L’ultimo libro è pieno di esempi di utilizzo della libreria http://www.bouncycastle.org .

Se sei interessato alla crittografia, c’è CrypTool: http://www.cryptool.org/ CrypTool è un’applicazione gratuita di e-learning open source, utilizzata in tutto il mondo per l’implementazione e l’analisi di algoritmi crittografici .