JavaScript中的替代代码,用于javax.crypto

时间:2016-12-02 10:46:43

标签: javascript encryption aes cryptojs key-generator

我想在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 个答案:

答案 0 :(得分:3)

AES密钥只包含随机字节。因此,对于128字节的密钥,您可以这样做:

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

并编码:

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

当然,密钥与之前生成的密钥不同,您需要解码先前生成的基本64位编码密钥才能执行此操作。

要使用密钥,请使用显式密钥参数:

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

PKCS#7填充 - 与PKCS#5填充相同 - 已经是默认值,ECB不使用IV。