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
220 +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 Апр в 13:05
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир