Как реализовать шифрование с использованием библиотеки openssl на языке JavaScript?

Как перевести данный код на PHP на JavaScript с использованием crypto-js, чтобы получить аналогичный результат? Я пробовал, но что-то не получается.
  • 19 октября 2023 г. 8:39
Ответы на вопрос 5
Для реализации шифрования с использованием библиотеки openssl на языке JavaScript вы можете использовать библиотеку crypto-js.

Вот пример, который показывает, как можно перевести код на PHP в аналогичный код на JavaScript, используя библиотеку crypto-js:

PHP код:

```php
<?php
$data = "Hello, world!";
$key = "secretkey";

$ivlen = openssl_cipher_iv_length($cipher="AES-128-CBC");
$iv = openssl_random_pseudo_bytes($ivlen);

$ciphertext = openssl_encrypt($data, $cipher, $key, $options=0, $iv);

$iv_hex = bin2hex($iv);
$ciphertext_hex = bin2hex($ciphertext);

echo "IV: " . $iv_hex . "<br>";
echo "Ciphertext: " . $ciphertext_hex;
?>
```

JavaScript код с использованием библиотеки crypto-js:

```javascript
const CryptoJS = require("crypto-js");

const data = "Hello, world!";
const key = "secretkey";

const iv = CryptoJS.lib.WordArray.random(16);
const ciphertext = CryptoJS.AES.encrypt(data, key, { iv: iv }).toString();

const iv_hex = iv.toString(CryptoJS.enc.Hex);
const ciphertext_hex = ciphertext.toString(CryptoJS.enc.Hex);

console.log("IV: " + iv_hex);
console.log("Ciphertext: " + ciphertext_hex);
```

Обратите внимание, что для работы с библиотекой crypto-js необходимо установить ее с помощью npm (`npm install crypto-js`). В данном примере используется версия 4.0.0.

Перевод PHP кода на JavaScript должен дать аналогичный результат для указанных входных данных.
Вот пример кода на JavaScript:

var data = '{ "message": "Hello, World!" }'; 
var secretKey = 'test'; 
var method = 'AES-128-CBC'; 

function encrypt(data, secretKey, method) {
    var secretIv = 'test';
    var iv = CryptoJS.SHA256(secretIv).toString();
    iv = iv.substring(0, 16);

    return CryptoJS.enc.Utf8.parse(data).ciphertext.toString(CryptoJS.enc.Base64);
}

console.log(encrypt(data, secretKey, method));
Похожие вопросы