2012-08-05 3 views
0

J'ai un fichier appelé plain.txt. A l'intérieur du fichier que j'ai:Pourquoi le chiffrement AES de la même chaîne avec la même clé est-il toujours différent?

Hello Hello Hello Hello 

J'utilise cette commande pour chiffrer:

openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin 

Puis-je imprimer la valeur chiffrée comme ceci:

buff = open("encrypted.bin") 
cipher = buff.read() 
buff.close() 
print b64encode(cipher) 

Mais il est toujours différent valeur. Le chiffre ne devrait-il pas toujours être le même? J'utilise le même fichier et le même mot de passe pour le crypter. Voici mes sorties de terminal:

Richard-Knops-MacBook-Pro:python_test richardknop$ openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin 
Richard-Knops-MacBook-Pro:python_test richardknop$ python test.py U2FsdGVkX1+AmoQiIkYAxIYanLr/kbjMfEJPPLfeE/wtyxScvAKzb7K38ZxoI097 
Richard-Knops-MacBook-Pro:python_test richardknop$ openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin 
Richard-Knops-MacBook-Pro:python_test richardknop$ python test.py U2FsdGVkX19vPD+OoiK7iSgYJiPMxuKGNWWrLlfBS0c3yCJkuv7QIBGEo2Q86UsV 
Richard-Knops-MacBook-Pro:python_test richardknop$ openssl enc -aes-128-cbc -salt -k "Hello" -in plain.txt -out encrypted.bin 
Richard-Knops-MacBook-Pro:python_test richardknop$ python test.py U2FsdGVkX1+3I8EC7u3lrcVPyD/JV12NAecWvTPXGga0Nh2cwqLAtGCDhLK6MI9g 
Richard-Knops-MacBook-Pro:python_test richardknop$ 
+0

En gros, le texte chiffré doit toujours regarder comme une sortie aléatoire. Si ce n'est pas le cas, cela laisse échapper des informations. Dans ce cas, vous pouvez voir si un cryptage avec le même mot de passe commence par une valeur identique précédemment cryptée. Imaginez la conversation suivante: êtes-vous général BadEncryption? Réponse chiffrée: "oui" Devrions-nous attaquer à l'aube? Réponse chiffrée: "oui" Donc l'ennemi voit les messages cryptés mais identiques et commence à manoeuvrer les obusiers. –

Répondre

7

Parce que le "sel" varie à chaque fois. Cela empêche, par exemple, les attaques de type arc-en-ciel sur les valeurs cryptées. Voir http://en.wikipedia.org/wiki/Salt_(cryptography)

+0

Puis-je le crypter sans utiliser de sel? Quel est le paramètre? –

+2

Vous pouvez utiliser -nosalt. Mais ce n'est pas recommandé. – podiluska

0

La raison pour laquelle vous obtenez une chaîne cryptée différente est "enc -aes-128-cbc". CBC est l'abréviation de Cipher Block Chaining. Ainsi, pour le 2ème bloc, la sortie cryptée du premier bloc agit comme un IV, donc chaque fois que vous obtenez une chaîne différente. pour plus de détails google "AES en mode CBC"

0

Vous obtenez différentes sorties à chaque exécution car un nouveau sel est généré chaque fois que vous exécutez la commande. Afin de fournir le même sel pour chaque utilisation de l'exécution consécutive l'option -S salt, à savoir

openssl enc -aes-128-cbc -salt -S "Salt" -k "Hello" -in plain.txt -out encrypted.bin 
Questions connexes