AES 128 en Python
Je ne sais pas pourquoi quand j'ai chiffrer en AES de texte avec le PyCrypto (Crypto.Chiffrement AES), le résultat n'est pas le même que le cryptogramme de générer un code en C.
Par exemple, le code suivant me donne
99756ed0115f676cef45ae25937bfd63247358a80803dde3fc1eae4953ee7277
au lieu de
CC613A0BDC930DABEA7A26126CE489EA
voici mon code:
key = '1F61ECB5ED5D6BAF8D7A7068B28DCC8E'
IV = 16 * '\x00'
mode = AES.MODE_CBC
encryptor = AES.new(key, mode, IV=IV)
text = '020ABC00ABCDEFf8d500000123456789'
ciphertext = encryptor.encrypt(text)
print binascii.hexlify(ciphertext)
S'il vous plaît montrer comment le texte est chiffré à partir de C.
Si vous utilisez l'exemple de vecteurs à partir de la FIPS-197 Standard AES-vous obtenir le résultat correct? csrc.nist.gov/publications/fips/fips197/fips-197.pdf Note vous devrez peut-être tester avec Electronic Code Book Mode (BCE) assurez-vous que votre mode ne change pas le résultat. Si la BCE Mode ne doit pas être utilisé dans un produit final
AES est un algorithme de chiffrement par bloc le sens d'un court texte en clair sera complétée à 128 bits ou 256 bits avant de les crypter. La sortie que vous n'aimez pas est exactement 256 bits, ce qui est une bonne longueur; la sortie de votre programme C est de 128 bits. Les deux bibliothèques ont différentes tailles de bloc par défaut. Ceci est indépendant de la longueur de la clé.
Si vous utilisez l'exemple de vecteurs à partir de la FIPS-197 Standard AES-vous obtenir le résultat correct? csrc.nist.gov/publications/fips/fips197/fips-197.pdf Note vous devrez peut-être tester avec Electronic Code Book Mode (BCE) assurez-vous que votre mode ne change pas le résultat. Si la BCE Mode ne doit pas être utilisé dans un produit final
AES est un algorithme de chiffrement par bloc le sens d'un court texte en clair sera complétée à 128 bits ou 256 bits avant de les crypter. La sortie que vous n'aimez pas est exactement 256 bits, ce qui est une bonne longueur; la sortie de votre programme C est de 128 bits. Les deux bibliothèques ont différentes tailles de bloc par défaut. Ceci est indépendant de la longueur de la clé.
OriginalL'auteur TomasG | 2015-08-22
Vous devez vous connecter pour publier un commentaire.
Vous devez
unhexlify
à la fois la clé et le texte (par exemple dans IPython à l'aide de Python 3);Edit: André Caron correctement états dans les commentaires, il est généralement un mauvaise idée d'utiliser un IV qui sont constitués uniquement de zéros. J'ai changé le code pour utiliser un hasard IV. Notez que le IV devrait également être communiquée au récepteur; il est nécessaire pour le décryptage. Souvent, le IV est ajouté le texte chiffré.
Je ne recommanderais pas de multiplication de l'utilisation de null vecteur d'initialisation. Python a un support intégré pour cryptographiques-safe génération d'octets aléatoires avec os.urandom(). Nous devrions mettre à jour la réponse à utiliser quelque chose comme
IV = os.urandom(16)
.Un très bon point. Mis à jour pour inclure un hasard IV.
OriginalL'auteur Roland Smith