Я шифрую свой пароль пользователя в JavaScript следующим образом:
var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
Он отлично работает, но теперь я пытаюсь расшифровать PHP на стороне сервера следующим образом:
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, "Secret Passphrase", base64_decode($password), MCRYPT_MODE_CBC, $iv);
вообще не работает, расшифрованная строка пароля выглядит очень странно:
string(64) ">�OX2MS��댗v�<$�ʕ��i�̄��_��P���\�կ=�_6(�m����,4WT7��a"
Вот текущее состояние моего кода в JavaScript после полезных комментариев:
var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
var ivHex = encryptedPassword.iv.toString();
var ivSize = encryptedPassword.algorithm.ivSize; // same as blockSize
var keySize = encryptedPassword.algorithm.keySize;
var keyHex = encryptedPassword.key.toString();
var saltHex = encryptedPassword.salt.toString(); // must be sent
var openSslFormattedCipherTextString = encryptedPassword.toString(); // not used
var cipherTextHex = encryptedPassword.ciphertext.toString(); // must be sent
Я отправляю saltHex и CipherTextHex на сервер PHP и использую mcrypt_decrypt() следующим образом:
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), $saltHex);
$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, "Secret Passphrase", base64_decode($cipherTextHex), MCRYPT_MODE_CBC, $iv);
Он по-прежнему не работает с этим обновленным кодом.
Может ли кто-нибудь помочь мне правильно расшифровать с помощью PHP-функции mcrypt_decrypt() для простого метода шифрования AES? Я уверен, что делаю что-то не так с шифром, режимом mcrypt и параметрами IV внутри моего метода mcrypt_decrypt(). Спасибо, если знаете.
JavaScript
и расшифровки вPHP
, потому что вы можете шифровать и расшифровывать вPHP
- person   schedule 28.12.2014javascript
неjava
- person Francis.TM   schedule 28.12.2014encryptedPassword
, потому что он может быть закодирован в нем. CryptoJS использует OpenSSLFormatter. Вы должны изучить код CryptoJS. - person Artjom B.   schedule 28.12.2014MCRYPT_RIJNDAEL_128
. - person Artjom B.   schedule 28.12.2014