zaartix
@zaartix

Есть фрагмент кода node.js, нужно реализовать на php (Шифрование AES-256-CTR). Как?

задача: правильно формировать подпись для внешнего апи, в качестве примера формирования валидной подписи есть этот код на ноде:
var encrypt = function(text, password)  {
  var cipher = crypto.createCipher('aes-256-ctr', password)
  var crypted = cipher.update(text,'utf8','hex')
  crypted += cipher.final('hex')
  return crypted
}

На PHP нужно повторить тоже самое, т.е. добиться одинакового результата для одинаковых входных параметров. Пробовал так:
$sign = bin2hex(openssl_encrypt($text, 'AES-256-CTR', $password,1,str_repeat('\0',8)));

Не получается, дело в том, что openssl_encrypt использует инициализационный вектор (последний параметр), а на ноде используется createCipher (он не использует его).

Из мана ноды по crypto.createCipher(algorithm, password):
The implementation of crypto.createCipher() derives keys using the OpenSSL function EVP_BytesToKey with the digest algorithm set to MD5, one iteration, and no salt.
Из исходников ноды:
https://github.com/nodejs/node-convergence-archive...
интересующий момент:
password is used to derive key and IV
но вот как именно из пароля делается IV и ключ не очень понятно.

Подскажите плз куда копать?
  • Вопрос задан
  • 511 просмотров
Решения вопроса 1
zaartix
@zaartix Автор вопроса
Рабочее, но не нативное решение:
exec('openssl enc -aes-256-ctr -a -in string.txt -k your_password -nosalt -out openssl_out.txt');
echo bin2hex(base64_decode(file_get_contents('ssl_out.txt')));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы