我在PHP上有一些代码,这些代码无法编辑,并且数据库中充满了以这种方式加密的消息。
$key = '297796CCB81D2553B07B379D78D87618'
return $encrypted = openssl_encrypt($data, 'AES-128-ECB', $key);
我必须编写一些JS代码来加密和解密这些消息。我为此使用CryptoJS。
const key = '297796CCB81D2553B07B379D78D87618'
let k = CryptoJS.enc.Base64.parse(key)
let cypher = CryptoJS.AES.encrypt(this.text, k, {mode: CryptoJS.mode.ECB})
this.cypher = CryptoJS.enc.Base64.stringify(cypher.ciphertext)
我无法获得这些代码来产生相同的结果。对于“测试”字符串,我得到以下结果:JS: H1AG6j/i/iSqifSNCG5JKw==
,PHP: Nqrur4UMEicEMwJC39qq0A==
我试图解决3天,但找不到问题。 我唯一可以编辑的代码是JS。
答案 0 :(得分:1)
如果在PHP部分中将方法更改为AES-256-ECB,则它将使用相同的密钥(长度)。正是由于CrypoJS.AES,它会根据密钥的长度自行选择方法。
答案 1 :(得分:0)
我弄清楚是什么问题。 PHP中的openssl_encrypt将密钥作为UTF-8字符串。占用足够的长度后,它将忽略下一个字符,因此我们的密钥:'297796CCB81D2553B07B379D78D87618'修剪为'297796CCB81D2553'。 该代码有效:
// JS
const key = '297796CCB81D2553'
let k = CryptoJS.enc.Utf8.parse(key)
let cypher = CryptoJS.AES.encrypt(this.text, k, {mode: CryptoJS.mode.ECB})
this.cypher = CryptoJS.enc.Base64.stringify(cypher.ciphertext)