У меня есть следующий код на 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, может помочь мне выполнить тяжелую работу. .
да, однако я не совсем понимаю, как это сделать в JS, если мне нужно получить такой же ключ, как в Java.
возможный дубликат stackoverflow.com/questions/21367907/generate-aes-key-on-nod e
@miradham да, это помогает, но не может полностью осветить мою проблему, я добавил комментарий к опубликованной вами ссылке. Спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, это то, что вам нужно:
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. Возможно, мне стоит обновить свой вопрос, чтобы его было легче понять.
Итак, ваш вопрос в том, как получить значение, которое живет в java, из JavaScript ??
нет, я не понимаю, как реализовать процесс (от secretString до ключа в Java) в JavaScript. Потому что то, что вы опубликовали, я сделал в своем JS-коде. кстати, обновил свой пост.
Вы можете использовать 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 за кулисами
Вы просто пытаетесь сгенерировать ключ в JavaScript?