Pycrypto aes 256 vecteur d'Initialisation de la taille
ici est le cas, j'ai un script php qui utilise aes256 ,CBC
les clés et IV de la taille de 32 octets de long
data= '123456789abcdef'
from Crypto.Cipher import AES
a = AES.new('oqufXQ(?bc=6_hR2I3sMZChDpb6dDlw4',2,'fOaiIOkD8*9Xeu_s4_bb87Ox_UG+D9GA')
print a.encrypt(data)
et l'erreur que j'ai eu
<type 'exceptions.ValueError'>: IV must be 16 bytes long
Traceback (most recent call last):
File "/base/data/home/apps/s~xxxxxxx/1.155074369696961822/main.py", line 4, in <module>
code php qui fonctionne
echo base64_encode(encrypt('0123456789abcdef')) ;
function encrypt($data)
{
return mcrypt_encrypt(MCRYPT_RIJNDAEL_256 ,'oqufXQ(?bc=6_hR2I3sMZChDpb6dDlw4', $data , MCRYPT_MODE_CBC, utf8_encode('fOaiIOkD8*9Xeu_s4_bb87Ox_UG+D9GA') );
}
Je ne peux pas changer le IV de taille
Remarque que je ne suis Pas très Familier Avec Python, Juste Besoin d'un moyen de chiffrer les données qu'il sera l'un appengine .
Vous ne pouvez pas changer le IV de taille. AES 256 est un chiffrement par bloc, avec une taille de bloc de 16, de sorte que lorsque utilisé dans n'importe quel type de modes de chiffrement qui utilise un IV, le IV est un gros bloc, c'est à dire 16 octets.
mon script php est à l'aide d'un 32 octets de la chaîne aléatoire comme IV , suis-je en train de faire quelque chose de mal? mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); retourne 32
Désolé, je ne sais pas alors. Je m'attends à ce AES256 en mode CBC à utiliser un bloc de IV, qui est XORed avec le premier bloc de texte en clair avant le chiffrement du texte en clair. Si mcrypt fait quelque chose de différent qui implique une autre de 16 octets de IV, alors il n'est pas à l'aide de la CBC mode de chiffrement comme I le comprendre, ce qui signifie qu'il ne va pas à inter-opérer avec une mise en œuvre qui fonctionne de la façon dont je le comprends. Je ne prétends pas que ma compréhension est un gros problème, mais il correspond au message d'erreur que vous obtenez à partir de pycrypto, donc je pense que les modes de chiffrement en quelque sorte ne sont pas appariés.
Oh, je suppose qu'une chose à vérifier est de savoir si mcrypt est à l'aide de pbkdf2 ou quelque chose de manipuler les soi-disant IV de la donner, et en utilisant une partie de la suite de cela que les vrais IV.
ajouté le code php qui permet de crypter l'amende, je ne pense pas que ses utilisations pbkdf2 à dériver de nouvelles IV, ne sais pas si php ne que par défaut
mon script php est à l'aide d'un 32 octets de la chaîne aléatoire comme IV , suis-je en train de faire quelque chose de mal? mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC); retourne 32
Désolé, je ne sais pas alors. Je m'attends à ce AES256 en mode CBC à utiliser un bloc de IV, qui est XORed avec le premier bloc de texte en clair avant le chiffrement du texte en clair. Si mcrypt fait quelque chose de différent qui implique une autre de 16 octets de IV, alors il n'est pas à l'aide de la CBC mode de chiffrement comme I le comprendre, ce qui signifie qu'il ne va pas à inter-opérer avec une mise en œuvre qui fonctionne de la façon dont je le comprends. Je ne prétends pas que ma compréhension est un gros problème, mais il correspond au message d'erreur que vous obtenez à partir de pycrypto, donc je pense que les modes de chiffrement en quelque sorte ne sont pas appariés.
Oh, je suppose qu'une chose à vérifier est de savoir si mcrypt est à l'aide de pbkdf2 ou quelque chose de manipuler les soi-disant IV de la donner, et en utilisant une partie de la suite de cela que les vrais IV.
ajouté le code php qui permet de crypter l'amende, je ne pense pas que ses utilisations pbkdf2 à dériver de nouvelles IV, ne sais pas si php ne que par défaut
OriginalL'auteur user80287 | 2011-12-01
Vous devez vous connecter pour publier un commentaire.
Aha!
Il y a une différence d'opinion, de ce que le "256" se réfère à.
AES a un fixe taille de bloc de 128 bits, "AES 256" signifie des blocs de 128 bits, 256 bits clé, 14 tours.
Cependant, Rijndael permet à la fois de la taille de la clé et de la taille de bloc variable.
MCRYPT_RIJNDAEL_256
se réfère à Rijndael avec taille de bloc fixé à 256 (et je ne sais pas combien de tours). Donc il n'a en effet de prendre un 32 octets IV. Votre script PHP est pas en utilisant AES 256.Ceci est confirmé dans la https://bugs.php.net/bug.php?id=47125 -- le journaliste considère comme un bug dans PHP mcrypt, PHP considère comme un bug dans libmcrypt, mais ce n'est pas un bug, depuis libmcrypt n'document ce
MCRYPT_RIJNDAEL_256
moyens (au moins le linux page de man pour mcrypt, mon Google-fu a pas réussi à trouver toute la documentation pour libmcrypt). Cette chose n'est pas la même chose que ce que AES 256 moyens.Donc, vous êtes le cryptage et le décryptage avec des chiffres qui, bien que liées, pourrait tout aussi bien être complètement différent.
La mauvaise nouvelle, c'est qu'il ne semble pas être un
Crypto.Cipher.RIJNDAEL
dans PyCrypto. Si vous pouvez passer une clé de 256 bits à MCRYPT_RIJNDAEL_128 dans le script PHP, alors ce serait AES 256 (merci Paŭlo).Wow! Merci Pour l'explication. J'ai pensé AES et Rijndael a une même application , je n'ai pas de contrôle sur les touches ou IV je veux dire je ne peux pas changer le IV. j'ai donc besoin d'utiliser d'autres lib , merci encore.
Steve: en Fait, MCRYPT_RIJNDAEL_128 ("Rijndael 128 bits taille de bloc") est l'ensemble des trois versions de l'AES - il suffit de passer une clé de la bonne taille, et qu'il va choisir le droit de l'algorithme AES-128, AES-192, AES-256). (Ce ne sera pas vous aider si vous ne pouvez pas modifier le script PHP, si.)
OriginalL'auteur Steve Jessop