Не могли бы вы помочь мне переписать следующий код на 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); }