Как реализовать этот код, связанный с шифрованием, в JavaScript?

У меня есть следующий код на Java.

        String secretString = 'AAABBBCCC'
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom securerandom = SecureRandom.getInstance("SHA1PRNG");
        securerandom.setSeed(secretString.getBytes());
        kgen.init(256, securerandom);
        SecretKey secretKey = kgen.generateKey();
        byte[] enCodeFormat = secretKey.getEncoded();
        SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
        Security.addProvider(new BouncyCastleProvider());
        Cipher cipher = Cipher.getInstance("AES");

        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] byteContent = content.getBytes("utf-8");
        byte[] cryptograph = cipher.doFinal(byteContent);
        String enc1 = Base64.getEncoder().encodeToString(cryptograph);
        return enc1;

Мне нужно реализовать его в JavaScript / Node.js, однако я могу вычислить только последнюю половину в js, как показано ниже.

        'use strict';
        const crypto = require('crypto');
        const ALGORITHM = 'AES-256-ECB';
        const secretString = 'AAABBBCCC'

        // missing part in JS (how to convert secretString to key)

        function encrypt(plaintext, key) {
            const cipher = crypto.createCipheriv(ALGORITHM, key, Buffer.alloc(0));
            return cipher.update(plaintext, 'utf8', 'base64') + cipher.final('base64');
        }

Что касается предыдущей части Java (от secretString до ключ, созданной KeyGenerator), я не знаю, как реализовать ее в JavaScript, и я не знаю, есть ли такая вещь, как KeyGenerator в мире JavaScript, может помочь мне выполнить тяжелую работу. .

Вы просто пытаетесь сгенерировать ключ в JavaScript?

mwilson 16.08.2018 06:16

да, однако я не совсем понимаю, как это сделать в JS, если мне нужно получить такой же ключ, как в Java.

kenshinji 16.08.2018 06:18

возможный дубликат stackoverflow.com/questions/21367907/generate-aes-key-on-nod‌ e

miradham 16.08.2018 06:27

@miradham да, это помогает, но не может полностью осветить мою проблему, я добавил комментарий к опубликованной вами ссылке. Спасибо.

kenshinji 16.08.2018 06:37
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
147
2

Ответы 2

Я думаю, это то, что вам нужно:

const crypto = require("crypto-js");


// Encrypt
const ciphertext = crypto.AES.encrypt('SOMETHING SECRET', 'secret key 123');

// Decrypt
const bytes  = crypto.AES.decrypt(ciphertext.toString(), 'secret key 123');
const decryptedData = bytes.toString(crypto.enc.Utf8);

console.info(decryptedData);

https://runkit.com/mswilson4040/5b74f914d4998d0012cccdc0

ОБНОВИТЬ

JavaScript не имеет собственного эквивалента для генерации ключей. Ответ - создать свой собственный или использовать сторонний модуль. Я бы порекомендовал для начала что-то вроде uuid.

Спасибо за ваш ответ, я думаю, вы неправильно поняли самую важную часть моего вопроса, а именно от KEY до ввода кода Java. Возможно, мне стоит обновить свой вопрос, чтобы его было легче понять.

kenshinji 16.08.2018 06:13

Итак, ваш вопрос в том, как получить значение, которое живет в java, из JavaScript ??

mwilson 16.08.2018 06:13

нет, я не понимаю, как реализовать процесс (от secretString до ключа в Java) в JavaScript. Потому что то, что вы опубликовали, я сделал в своем JS-коде. кстати, обновил свой пост.

kenshinji 16.08.2018 06:17

Вы можете использовать crypto.randomBytes(). Согласно его документации:

Generates cryptographically strong pseudo-random data. The size argument is a number indicating the number of bytes to generate.

Кроме того, он использует openssl RAND_bytes API за кулисами

Другие вопросы по теме