Не могли бы вы помочь мне переписать следующий код на JavaScript? <br/> <pre><code class="php"><?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>
Для выполнения задачи расшифровки строки в 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); }