我的代码如下:内容:test 密码:12345678
测试结果:73C58BAFE578C59366D8C995CD0B9D6D
在线结果:fdc2a7ef5a761218fd4c10294e3b516c
public static byte[] encrypt(String content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes("utf-8")));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(byteContent);
return result;
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
你能给个精确一点的回答吗?这里用的是AES,也就是前四条。NoPadding的话加密内容不是16的整数直接异常,其它组合我都试过了。调不出。
追答细看了一下你的代码,我不太明白这段的含义
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes("utf-8")));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecureRandom指的是一个随机数,参数是种子,而不是key的内容
修改了下代码就会得出线上的内容,一般密码都会用MD5生成个摘要,才用来作Key的值(MD5刚好是16个字节)