CryptoJS AES-128-ECB и PHP openssl_encrypt не совпадают - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть некоторый код на 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)

Я не могу получить эти коды для получения одинаковых результатов.Для строки 'test' я получил следующие результаты: JS: H1AG6j/i/iSqifSNCG5JKw==, PHP: Nqrur4UMEicEMwJC39qq0A==

Я пытаюсь решить это в течение 3 дней, но не могу найти проблему.Единственный код, который я могу редактировать - это JS.

1 Ответ

0 голосов
/ 24 декабря 2018

Я понял, в чем проблема.openssl_encrypt в PHP принимает ключ как строку 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) 
...