Как в JavaScript расшифровать строку, используя ключ?

Не могли бы вы помочь мне переписать следующий код на JavaScript? <br/> <pre><code class="php">&lt;?php

$encrypted_data = 'jPNGTNLtGIBc7Jv2UXj7a3FNQk13eUJ5T3VIUXlOS0ZVOEpnMUpPMnhvQXg5bE5kMGFHejVxaTFnYTA9';
$key = 'qEExPE+jkJxQUt8fSO+XwzXgRGh6kLHy+lWEe6Z8T6s=';

$decoded_data = base64_decode($encrypted_data);
$iv_dec = substr($decoded_data, 0, openssl_cipher_iv_length('AES-256-CBC'));
$encrypted_text = substr($decoded_data, openssl_cipher_iv_length('AES-256-CBC'));

$decrypted = openssl_decrypt($encrypted_text, 'AES-256-CBC', $key, 0, $iv_dec);

echo "Расшифрованная строка: " . $decrypted;</code></pre> <br/> <br/> <a href="https://onlinephp.io/c/f09fe" rel="nofollow">https://onlinephp.io/c/f09fe</a>
  • 31 октября 2024 г. 10:12
Ответы на вопрос 2
Для выполнения задачи расшифровки строки в JavaScript с использованием AES-256-CBC, вам нужно будет использовать библиотеку, так как встроенная поддержка криптографии в JavaScript несколько ограничена. Одной из популярных библиотек для этого является `crypto-js`, которая предоставляет удобный интерфейс для работы с шифрованием и расшифровкой.

Вот аналог кода на JavaScript:

1. Сначала вам нужно установить библиотеку `crypto-js`. Если вы используете Node.js, вы можете установить её через npm:
   ```
   npm install crypto-js
   ```

2. Затем используйте следующий код для расшифровки строки:

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

const encryptedData = 'jPNGTNLtGIBc7Jv2UXj7a3FNQk13eUJ5T3VIUXlOS0ZVOEpnMUpPMnhvQXg5bE5kMGFHejVxaTFnYTA9';
const key = 'qEExPE+jkJxQUt8fSO+XwzXgRGh6kLHy+lWEe6Z8T6s=';
const ivLength = 16; // Размер вектора инициализации для AES

// Декодируем зашифрованные данные из base64
const decodedData = CryptoJS.enc.Base64.parse(encryptedData);

// Извлекаем IV и зашифрованный текст
const iv = decodedData.words.slice(0, ivLength / 4); // Первые 16 байт (4 * 4 = 16)
const encryptedText = decodedData.words.slice(ivLength / 4); // Остальная часть

// Декодируем ключ
const decodedKey = CryptoJS.enc.Base64.parse(key);

// Расшифровка
const decrypted = CryptoJS.AES.decrypt(
    { ciphertext: CryptoJS.lib.WordArray.create(encryptedText) },
    decodedKey,
    { iv: CryptoJS.lib.WordArray.create(iv) }
);

// Выводим расшифрованную строку
console.log("Расшифрованная строка:", decrypted.toString(CryptoJS.enc.Utf8));
```

Обратите внимание на то, что в JavaScript используется `WordArray` для работы с данными байтов, поэтому мы используем `slice`, чтобы выделить нужные части из расшифрованных данных.

Этот пример должен работать так же, как ваш PHP-код – он декодирует зашифрованные данные из формата Base64, извлекает вектор инициализации и затем расшифровывает текст с использованием указанного ключа.
Так (для nodejs)? 
const crypto = require("crypto");

const encryptedData =
  "jPNGTNLtGIBc7Jv2UXj7a3FNQk13eUJ5T3VIUXlOS0ZVOEpnMUpPMnhvQXg5bE5kMGFHejVxaTFnYTA9";
const key = "qEExPE+jkJxQUt8fSO+XwzXgRGh6kLHy+lWEe6Z8T6s=";

const decodedKey = Buffer.from(key, "base64");
const decodedData = Buffer.from(encryptedData, "base64");
const ivLength = 16; 

const iv = decodedData.slice(0, ivLength);
const encryptedText = decodedData.slice(ivLength);

const decipher = crypto.createDecipheriv("aes-256-cbc", decodedKey, iv);

try {
  let decrypted = decipher.update(encryptedText, null, "utf8");
  decrypted += decipher.final("utf8");
  console.log("Расшифрованная строка:", decrypted);
} catch (error) {
  console.error("Ошибка расшифровки:", error.message);
}
Похожие вопросы