Java中的javascript AES加密是什么模式?
我需要将一些代码从java
移植到处理加密的javascript
。给定相同的密钥,我无法按照现有代码复制相同的密码文本
我怀疑我不能找出正确的模式。附加代码段-
public String encrypt(String message, String enc_key) throws Exception {
try {
initEncrypt(enc_key);
byte[] encstr = cipher.doFinal(message.getBytes());
return HexUtil.HextoString(encstr);
} catch (BadPaddingException nse) {
throw new Exception("Invalid input String");
}
}
public void initEncrypt(String key) throws Exception {
try {
skeySpec = new SecretKeySpec(HexUtil.HexfromString(key), "AES");
cipher = Cipher.getInstance("AES");
// cipher.
cipher.init(1, skeySpec);
System.out.println(cipher.getAlgorithm());
} catch (NoSuchAlgorithmException nsae) {
throw new Exception("Invalid Java Version");
} catch (NoSuchPaddingException nse) {
throw new Exception("Invalid Key");
}
}
HexToString函数只转换字节数组中的十六进制字符串键
提供键-10663d0b39d73d614116f0b3cbebd666
(十六进制)
纯文本-hello
,我明白了-
密文-57C758B2B3A8580658A11DBD95109EC4
根据这个so答案,默认模式应该是AES/ECB/PKCS5Padding
但是当我尝试使用相同的值here加密时,我会得到密文-
3874350661ABB0B452A4960FE3953C18
我尝试过各种其他模式,但无法匹配密码文本。 任何帮助都将不胜感激
# 1 楼答案
不要依赖默认行为如果您知道这些选项,请继续并指定它们。如果你不知道这些选项,那么去找出它们,然后指定它们
这两封加密邮件都是用您的密钥加密的“hello”。。唯一的区别是不同的填充模式: