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; }
Проблема заключается в различиях между 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.
Проблема заключается в различиях между 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.