В чем проблема?
Проблема в том, что обе библиотеки используют разные ключи и векторы инициализации (IV) внутри.
Помните, что шифр AES работает не с паролями, а с ключами и IV.
Когда вы предоставляете пароль для криптографической библиотеки, она использует некоторый внутренний механизм для автоматического получения ключа и IV.
Этот механизм неочевиден, но обычно описывается в документации криптографических библиотек.
В документации модуля crypto
в node.js
говорится, что он использует функцию EVP_BytesToKey
OpenSSL для получения ключа и IV:
crypto.createCipher (алгоритм, пароль) - создает и возвращает объект Cipher, который использует заданный алгоритм и пароль.
...
Пароль используется для получения ключа шифрования и вектора инициализации (IV). Значение должно быть либо строкой в двоичной кодировке, либо [Buffer [].
Реализация crypto.createCipher () извлекает ключи с помощью функции OpenSSL EVP_BytesToKey с алгоритмом дайджеста, установленным на MD5, одна итерация и без соли. Отсутствие соли допускает словарные атаки, поскольку один и тот же пароль всегда создает один и тот же ключ. Малое количество итераций и некриптографически безопасный алгоритм хеширования позволяют очень быстро проверять пароли.
Цитата из документации по Node.js v5.6.0.
Как решить проблему?
Правильное решение - использовать криптографически безопасный алгоритм хеширования для получения ключа из пароля, а затем вручную предоставить ключи и IV в криптографическую библиотеку, какой бы она ни была.
Быстрое и грязное (и крайне небезопасное) решение - найти подпрограмму Delphi, эквивалентную EVP_BytesToKey
, и просто использовать ее, чтобы заставить ее работать.
Не забудьте также убедиться, что вы используете ту же схему заполнения. TCodec
должен позволить вам выбрать PaddingScheme
из padPKCS
, который должен быть совместим с модулем шифрования в node.js
. Если не работает, попробуйте и другие варианты.
Другой вариант - использовать OpenSSL в Delphi, который уже должен быть совместим с тем, что используется в node.js
.
Также см. Этот вопрос с проблемой, аналогичной вашей:
person
quasoft
schedule
13.02.2016