openssl_decrypt и base64_decode случайно не могут декодировать / дешифровать зашифрованный текст из CryptoJS

Я работаю с CryptoJS и PHP 5.5.12, используя пример кода от Брэйна Фу Лонга.

Я шифрую клиентскую часть с помощью следующего кода:

var msg = 'String to crypt';
var key = 'password';
var crypt_text = CryptoJS.AES.encrypt(JSON.stringify(msg), key, {format: CryptoJSAesJson}).toString();
sendString = "msg=" + crypt_text +"&key=" + k ;
//... call jQuery.ajax

Я расшифровываю серверную часть с помощью следующего кода:

function cryptoJsAesDecrypt($passphrase, $jsonString){
$jsondata = json_decode($jsonString, true);
try {
$salt = hex2bin($jsondata["s"]);
$iv  = hex2bin($jsondata["iv"]);
} catch(Exception $e) { return null; }
$ct = base64_decode($jsondata["ct"]);
$concatedPassphrase = $passphrase.$salt;
$md5 = array();
$md5[0] = md5($concatedPassphrase, true);
$result = $md5[0];
for ($i = 1; $i < 3; $i++) {
$md5[$i] = md5($md5[$i - 1].$concatedPassphrase, true);
$result .= $md5[$i];
}
$key = substr($result, 0, 32);
$data = openssl_decrypt($ct, 'aes-256-cbc', $key, true, $iv);
return json_decode($data, true);
}

Случайно, код сервера openssl_decrypt вернуть ложь.
Часто я видел это $ct = base64_decode($jsondata["ct"]); идти по ошибке для «base64 вне алфавита», но я попытался проверить в JS перед отправкой, и это кажется правильным. Код следующий:

var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghij ............" };
var sendString = "msg=" + crypt_text +"&key=" + k ;
if( Base64.decode( Base64.encode(sendString) )=== sendString  ){
// ok
} else {
alert('base 64 error');
return;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …