Это достаточно сложно. Функция crypto.createCipher создает ключ и IV из предоставленного вами пароля (подробности см. В документации createCipher ).
Это реализованоиспользуя функцию OpenSSL EVP_BytesToKey .
Здесь доступна реализация JavaScript: openssl-file .. мы будем использовать это для получения ключа и IV из пароля.
Итак, здесь есть два шага:
- Получить ключ и IV из вашего пароля.
- Используйте их с Crypto.js для декодирования вашей закодированной строки.
Шаг 1: Получить ключ и IV (Выполнить в Node.js)
const EVP_BytesToKey = require('openssl-file').EVP_BytesToKey;
const result = EVP_BytesToKey(
'123|a123123123123123@&12',
null,
32,
'MD5',
16
);
console.log('key:', result.key.toString('hex'));
console.log('iv:', result.iv.toString('hex'));
Шаг 2: Расшифровать строку:
const encryptedValues = ['e0912c26238f29604f5998fa1fbc78f6', '0888e0558c3bce328cd7cda17e045769'];
// The results of putting the password '123|a123123123123123@&12' through EVP_BytesToKey
const key = '18bcd0b950de300fb873788958fde988fec9b478a936a3061575b16f79977d5b';
const IV = '2e11075e7b38fa20e192bc7089ccf32b';
for(let encrypted of encryptedValues) {
const decrypted = CryptoJS.AES.decrypt({ ciphertext: CryptoJS.enc.Hex.parse(encrypted) }, CryptoJS.enc.Hex.parse(key), {
iv: CryptoJS.enc.Hex.parse(IV),
mode: CryptoJS.mode.CBC
});
console.log('Ciphertext:', encrypted);
console.log('Plain text:', decrypted.toString(CryptoJS.enc.Utf8));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.min.js"></script>
Обратите внимание, что если вы меняете пароль, вам нужно сгенерировать новый ключ и iv с помощью EVP_BytesToKey.
Я должен отметить, что createCipher теперьустарел, поэтому используйте с осторожностью. То же самое относится и к EVP_BytesToKey.