Aes-256-crt crypto не работает? Есть код на PHP и JS, для шифрования и дешифровки с использованием AES-256-CTR, PHP отлично справляется и с дешифровкой и шифрованием, но JS возвращает пустую строку. Почему?function encrypt ($text) {
return openssl_encrypt($text, "aes-256-ctr", "PASSWORD");
}
function decrypt ($crypt) {
return openssl_decrypt($crypt, "aes-256-ctr", "PASSWORD");
}function decrypt(text) {
let decipher = crypto.createDecipher("aes-256-ctr", "PASSWORD");
let dec = decipher.update(text, "hex", "utf8");
dec += decipher.final("utf8");
return dec;
}

21 Авг 2019 в 07:12
232 +1
0
Ответы
1

Проблема заключается в различиях между PHP и JS при использовании OpenSSL и Node.js криптографии.

В PHP, функция openssl_encrypt возвращает зашифрованный текст в формате base64, поэтому для дешифровки второй функции decrypt нужно передать зашифрованный текст в формате base64.

Однако в JS, функция createDecipher ожидает, чтобы зашифрованный текст был представлен в формате hex, а не base64. Поэтому, перед передачей зашифрованного текста в функцию decrypt в JS, вам нужно преобразовать его в формат hex.

Пример исправленной версии функции decrypt в JS:

function decrypt(text) {
let decipher = crypto.createDecipher("aes-256-ctr", "PASSWORD");
let dec = decipher.update(Buffer.from(text, 'base64'));
dec = Buffer.concat([dec, decipher.final()]).toString('utf8');
return dec;
}

Таким образом, вы должны преобразовать зашифрованный текст в формат hex перед передачей его в функцию decrypt в JS.

20 Апр 2024 в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир