Альтернативный код в JavaScript для javax.crypto

Я хочу реализовать приведенный ниже код в JavaScript вместо использования пакетов javax.crypto.

Ниже код будет генерировать ключ с использованием AES.

    KeyGenerator kgen;
    String key;
    try {
        kgen = KeyGenerator.getInstance("AES");
        kgen.init(128);
        SecretKey secretkey = kgen.generateKey();
        BASE64Encoder encode = new BASE64Encoder();
        key = encode.encode(secretkey.getEncoded());
    } catch (NoSuchAlgorithmException e) {
       // exceptionLogFile(e, null);
        e.printStackTrace();
        key = "Error@SecretKeyGeneration: No Such Algorith Exception. " + e.getMessage();
    } catch (Exception e) {
       // exceptionLogFile(e, null);
        e.printStackTrace();
        key = "Error@SecretKeyGeneration: " + e.getMessage();
    }
    return key;

Это прекрасно работает в Java, теперь кто-нибудь может предложить мне альтернативу в JavaScript.

Я узнал о Crypto.js, но как я могу использовать здесь, не понимая.

Для шифрования и дешифрования я использую "AES/ECB/PKCS5Padding" так это совместимо с кодом JavaScript?

Пожалуйста помоги.

Заранее спасибо.

1 ответ

Решение

Ключ AES состоит просто из случайных байтов. Так что для 128-байтового ключа вы можете просто сделать:

var key = CryptoJS.lib.WordArray.random(128/8);

и закодировать это:

var keyBase64 = CryptoJS.enc.Base64.stringify(key);

Конечно, ключ не будет идентичен тому, который вы сгенерировали ранее, для этого вам необходимо декодировать ранее сгенерированный ключ в кодировке base 64.


Чтобы использовать ключ, используйте явные параметры ключа:

var encrypted = CryptoJS.AES.encrypt("Message", key, { mode: CryptoJS.mode.ECB});

Заполнение PKCS#7 - идентичное заполнению PKCS#5 - уже используется по умолчанию, и ECB не использует IV.

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