Шифрование с помощью CryptoJs, дешифрование с помощью PHP openssl_decrypt - PullRequest
0 голосов
/ 13 января 2019

Я работаю над шифрованием с клиентской стороны на серверную, используя библиотеку Javascript CryptoJS:

function encrypt(msg, pass) {
    var salt = CryptoJS.lib.WordArray.random(128/8);

    var key = CryptoJS.SHA256(pass);
    key = key.toString().substr(0,32);
    var iv = CryptoJS.lib.WordArray.random(128/8);

    var encrypted = CryptoJS.AES.encrypt(msg, key, { 
        iv: iv,
        //padding: CryptoJS.pad.Pkcs7,
        mode: CryptoJS.mode.CBC
    });
    var transitmessage = salt.toString() + iv.toString() + encrypted.toString();
    window.location.href="test_cbc.php?action=decrypt&msg=" + transitmessage;
}

На стороне сервера:

<code><?php
if(!empty($_GET["action"]) && $_GET["action"]=="decrypt"){
    $msg=$_GET["msg"];
    echo "<pre>";
    $_salt=substr($msg, 0, 32);
    $_iv = substr($msg, 32, 32);
    $_enc = substr($msg, 64);
    $salt = pack("H*", $_salt);
    $iv = pack("H*", $_iv);
    $encrypted = substr(base64_decode($_enc),16);
    $key = hash("SHA256", "helloworld");
    $decrypted = openssl_decrypt($encrypted,"AES-128-CBC",$key,OPENSSL_RAW_DATA,$iv);
    //$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, trim($encrypted), MCRYPT_MODE_CBC, $iv);
    echo $decrypted;
    echo "
"; }

Если я использую openssl_decrypt, $ decrypted будет пустым. Если я использую mcrypt, я получаю нечитаемые символы.

Где у меня неправильный код?

...