Crypter et décrypter une chaîne en java

Je suis nouveau à la cryptographie. Je souhaite apprendre à chiffrer et déchiffrer le texte d’un fichier … lorsque je renvoie les articles en rapport dans le réseau. Je doutais que le texte crypté soit identique pour un texte unique lorsque le cryptage est effectué plusieurs fois sur le même texte. Quelqu’un peut-il s’il vous plaît effacer mon doute?

public Ssortingng encrypt(Ssortingng str) { try { // Encode the ssortingng into bytes using utf-8 byte[] utf8 = str.getBytes("UTF8"); // Encrypt byte[] enc = ecipher.doFinal(utf8); // Encode bytes to base64 to get a ssortingng 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 Ssortingng decrypt(Ssortingng 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 Ssortingng(utf8, "UTF8"); } catch (javax.crypto.BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } catch (java.io.IOException e) { } return null; } } 

Voici un exemple qui utilise la classe:

 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 Ssortingng encrypted = encrypter.encrypt("Don't tell anybody!"); // Decrypt Ssortingng decrypted = encrypter.decrypt(encrypted); } catch (Exception e) { } 

J’avais un doute sur le fait que le texte crypté soit identique pour un seul texte lorsque le cryptage est effectué plusieurs fois sur le même texte?

Cela dépend fortement de l’algorithme de cryptographie que vous utilisez:

  • L’un des objectives de certains algorithmes / la plupart (mature) est que le texte crypté est différent lorsque le cryptage est effectué deux fois. Une des raisons est qu’un attaquant, quel que soit le type de texte connu, ne peut pas calculer la clé.
  • Un autre algorithme (principalement des codes de hachage à sens unique), comme MD5 ou SHA, basé sur le fait que le texte haché est le même pour chaque chiffrement / hachage.

Que le cryptage soit identique lorsque le texte brut est crypté avec la même clé dépend de l’algorithme et du protocole. Dans la cryptographie, il existe un vecteur d’initialisation IV: http://en.wikipedia.org/wiki/Initialization_vector utilisé avec différents chiffrements pour que le même texte brut crypté avec la même clé donne différents textes chiffrés.

Je vous conseille d’en savoir plus sur la cryptographie sur Wikipedia, sur Bruce Schneier http://www.schneier.com/books.html et sur “La cryptographie de base avec Java” de David Hook. Le dernier livre est plein d’exemples d’utilisation de la bibliothèque http://www.bouncycastle.org .

CrypTool vous intéresse: http://www.cryptool.org/ CrypTool est une application d’apprentissage en ligne gratuite à code source ouvert, utilisée dans le monde entier pour la mise en oeuvre et l’parsing d’algorithmes cryptographiques .