我想在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代码兼容吗?
请帮忙。
提前致谢。
答案 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。