Décryptage de chaînes en Python cryptées avec MCRYPT_RIJNDAEL_256 en PHP
J'ai une fonction en PHP qui permet de crypter le texte comme suit:
function encrypt($text)
{
$Key = "MyKey";
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $Key, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}
Comment décrypter ces valeurs en Python?
source d'informationauteur dharmesh
Vous devez vous connecter pour publier un commentaire.
Pour déchiffrer cette forme de cryptage, vous aurez besoin d'obtenir une version de Rijndael. On peut être trouvé ici. Ensuite, vous aurez besoin de simuler la clé et le texte rembourrage utilisé dans le PHP Mcrypt module. Ils ajoutent
'\0'
d'étoffer le texte et la clé à la bonne taille. Ils sont à l'aide d'un 256 bits taille du bloc et de la taille de la clé utilisée avec la clé que vous donner est de 128 (il peut augmenter si vous lui donner une plus grande clé). Malheureusement, le Python de la mise en œuvre, je suis lié à seulement encode un seul bloc à la fois. J'ai créé des fonctions python qui simulent le chiffrement (pour les tests) et le déchiffrement en PythonCela peut être utilisé comme suit:
Pour comparaison, voici la sortie de PHP avec le même texte:
Si vous êtes prêt à utiliser MCRYPT_RIJNDAEL_128 plutôt que de 256 sur le PHP côté, c'est aussi simple que:
Bien que la réponse de @101100 était bon à l'époque, il n'est plus viable. La référence est maintenant un lien brisé, et le code ne s'exécute que sur les anciens Pythons (<3).
Au lieu de cela, le pprp projet semble combler le vide bien. Sur Python 2 et Python 3, juste
pip install pprp
puis:Je suis un peu consterné de voir que le texte chiffré sort différent que ce que vous voyez avec 101100 de réponse. J'ai cependant utilisé cette technique pour réussir à déchiffrer les données chiffrées en PHP comme décrit dans l'OP.