je la fonction suivante dans Ruby qui décrypte un peu de données:Conversion Ruby AES256 fonction Décrypter vers PHP
def decrypt(key, iv, cipher_hex)
cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
cipher.decrypt
cipher.key = key.gsub(/(..)/){|h| h.hex.chr}
cipher.iv = iv.gsub(/(..)/){|h| h.hex.chr}
decrypted_data = cipher.update(cipher_hex.gsub(/(..)/){|h| h.hex.chr})
decrypted_data << cipher.final
return decrypted_data
end
Je suis en train de faire exactement la même chose en PHP, mais je ne suis pas sûr ce que je fais mal. Voici ce que j'ai:
function decrypt_data($key, $iv, $cipher_hex) {
return mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
hex_to_str($key),
hex_to_str($cipher_hex),
MCRYPT_MODE_CBC,
hex_to_str($iv)
);
}
function hex_to_str($hex_str) {
preg_match_all('/(..)/', $hex_str, $matches);
$to_return = '';
foreach ($matches[1] as $val)
$to_return .= chr(hexdec($val));
return $to_return;
}
La sortie finit juste par être garbage, pas la chaîne que je cherche. Des idées?
Et avant même que nous commencions, le passage à MCRYPT_RIJNDAEL_256
ne semble pas aider et le fait juste se plaindre de l'iv ne pas être aussi long que la taille du bloc. Je crois 128 est correct dans ce cas puisque this site dit que le 128/256 est une indication de la taille du bloc, pas la taille de la clé.
Puis-je vous demander pourquoi vous faites cela? Juste pour le fun? Parce que vous * ne * devriez * pas écrire vos propres bibliothèques de chiffrement pour une utilisation en production. Ils sont ridiculement faciles à bousiller et extraordinairement difficile à obtenir. – Eli
Uuh ... Je ne suis pas, j'utilise les built-ins. Voir les références OpenSSL et mcrypt ci-dessus. –
Je ne vois rien en regardant. Essayez peut-être de prendre le décodage de chacun des hexs, clés et textes, et comparez cela directement pour voir si quelque chose ne va pas. Rijndael_256 devrait être le bon chiffre - la IV pourrait-elle être erronée, et ruby ne se plaint pas? – Justin