1
回答
关于php的aes加密,js无法解密
【腾讯云】学生服务器套餐10元/月 >>>   

我利用php自带的$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_ECB)加密函数进行aes加密,输出结果不是U2FsdGVkX1开头的格式,导致js那边报malformated utf-8 格式错误,请大神帮忙解答为什么;

<无标签>
举报
silver_wq
发帖于1年前 1回/242阅
共有1个答案 最后回答: 1年前

由于MCrypt年久失修,PHP从7.1开始将MCrypt标记为deprecated,从7.2开始MCrypt将从内置移到PECL,PHP官方推荐使用OpenSSL替代MCrypt.

<?php
header('Content-Type: text/plain;charset=utf-8');

$data = 'phpbest';
//生成密钥 echo base64_encode(openssl_random_pseudo_bytes(32));
$key = 'oScGU3fj8m/tDCyvsbEhwI91M1FcwvQqWuFpPoDHlFk=';
//生成初始化向量 echo base64_encode(openssl_random_pseudo_bytes(16));
$iv = 'w2wJCnctEG09danPPI7SxQ==';
echo '内容: '.$data."\n";

$encrypted = openssl_encrypt($data, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv));
echo '加密: '.base64_encode($encrypted)."\n";

$encrypted = base64_decode('To3QFfvGJNm84KbKG1PLzA==');
$decrypted = openssl_decrypt($encrypted, 'aes-256-cbc', base64_decode($key), OPENSSL_RAW_DATA, base64_decode($iv));
echo '解密: '.$decrypted."\n";

JS这边可以用crypto-js对AES进行解密,注意要先toString转成字符串后再进行解密.

顶部