我正在将我的代码从 PHP 5.6 升级到 7.3,这是我的 Ionic 应用程序的 Woocommerce 插件。与此同时,我注意到 mcrypt_decrypt 在 PHP 7 中已被弃用。我试图弄清楚如何更改我的代码,但它仍然没有返回相同的字符串。这是我在应用程序中的加密代码:var password = this.password;if (this.appConfig.App_Secret != '') { var key = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(this.appConfig.App_Secret).toString()); var iv = CryptoJS.enc.Utf8.parse(CryptoJS.MD5(this.appConfig.App_Secret).toString().substr(0, 16)); password = CryptoJS.AES.encrypt(password, key, { iv: iv }).toString();}这是我在 PHP 中的旧解密代码:$iv=substr(md5(get_option('sow_rest_api_secret')),0,16);$key = md5(get_option('sow_rest_api_secret'));$data = base64_decode($decrypt_str);$result = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);return rtrim($result,"\0");我使用 $result 变量更改行$result = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);到$result = openssl_decrypt($data, 'aes-128-gcm', $key, $options=OPENSSL_RAW_DATA, $iv);你能给予支持吗?
1 回答
蓝山帝景
TA贡献1843条经验 获得超7个赞
此外,MCRYPT_RIJNDAEL_256 不是 AES-256,它是 Rijndael 块密码的不同变体。如果你想在 mcrypt 中使用 AES-256,你必须使用带有 32 字节密钥的 MCRYPT_RIJNDAEL_128。OpenSSL 使您使用的模式更加明显(即“aes-128-cbc”与“aes-256-ctr”)。
这意味着您之前一直在使用 AES-256,而不是 AES-128。
此外,正如@Topaco 正确指出的那样,CryptoJS 默认使用 CBC 模式。
把这个放在一起:
$result = openssl_decrypt($data, 'aes-256-cbc', $key, $options=OPENSSL_RAW_DATA, $iv);
应该给出与您之前的解决方案相同的结果mcrypt_decrypt
。
- 1 回答
- 0 关注
- 249 浏览
添加回答
举报
0/150
提交
取消