前面写过一篇关于aes加密的文章“java使用aes加密文件内容”,里面有下面一段代码:
// 创建AES的KeyGenerator对象
KeyGenerator kgen = KeyGenerator.getInstance("AES");
// 利用用户传入的字符串作为种子初始化出128位的key生产者不能使用
//kgen.init(128, new SecureRandom(seed.getBytes()));因为在linux上会导致加解密出错,
//见代码后边的说明。
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
secureRandom.setSeed(seed.getBytes());
kgen.init(128, secureRandom);
//生成秘钥
SecretKey secretKey = kgen.generateKey();
//返回基本编码格式的密钥,如果此密钥不支持编码,则返回 null。
byte[] enCodeFormat = secretKey.getEncoded();
// 转换为AES专用密钥
SecretKeySpec specKey = new SecretKeySpec(enCodeFormat, "AES");
// 创建密码器
Cipher cipher = Cipher.getInstance("AES");
// 初始化为加密模式Cipher.ENCRYPT_MODE或解密模式Cipher.DECRYPT_MODE的密码器
cipher.init(type, specKey);
return cipher;
有同学看了之后联系我说有更简单的写法,如下:
SecretKeySpec keySpecification = new SecretKeySpec(seed.getBytes("utf-8"), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(type, keySpecification);
return cipher;
非常高兴这位同学提建议,也欢迎大家联系我给我指正,共同进步。