Java对称加密算法
⼀、对称加密算法概念
加密密钥和解密密钥相同,⼤部分算法加密揭秘过程互逆。
特点:算法公开、(相⽐⾮对称加密)计算量⼩、加密速度快、效率⾼。
弱点:双⽅都使⽤同样的密钥,安全性得不到保证。
⼆、常见对称加密算法
1、DES
已破解,不再安全,基本没有企业在⽤了,是对称加密算法的基⽯,具有学习价值。密钥长度56(JDK)、56/64(BC)。
2、DESede(三重DES)
java加密方式有哪些早于AES出现来替代DES,计算密钥时间太长、加密效率不⾼,所以也基本上不⽤。密钥长度112/168(JDK)、128/192(BC)。
3、AES
最常⽤的对称加密算法,密钥建⽴时间短、灵敏性好、内存需求低(不管怎样,反正就是好),实际使⽤中,使⽤⼯作模式为CTR(最好⽤BC去实现),此⼯作模式需要引⼊IV参数(16位的字节数组),密钥长度128/192/256,其中192与256需要配置⽆政策限制权限⽂件(JDK6),填充模式最常⽤的两种PKCS5Padding和PKCS7Padding,其中后者只有BC独有。
4、IDEA
常⽤的电⼦邮件加密算法,⼯作模式只有ECB,密钥长度128位。
5、PBE
综合了消息摘要算法和对称加密算法,最常见的是PBEWithMD5AndDES,⼯作模式只有CBC(已丧失安全性,不推荐使⽤),所以PBE 也不推荐使⽤了。
三、JDK版算法调⽤模板
1. ⽣成密钥
说明:
1.通过「Instance("DES")」⽣成密钥,
2.参数为算法名称:分别对应DES、DESede(即3DES)、AES
3.每种算法密钥长度参数:DES(56),3DES(112,168),AES(192,256)
2. 加/解密
1.加密或解密都通过cipher.init()设置,参数:ENCRYPT_MODE/DECRYPT_MODE
2.加密或解密都通过cipher.doFinal() 执⾏,获得byte[]类型结果。
四、代码⽰例
package minyuantec.backupsystem.action;
pto.Cipher;
pto.KeyGenerator;
pto.SecretKey;
pto.spec.SecretKeySpec;
public class DESUtil {
/*
* ⽣成密钥
*/
public static byte[] initKey() throws Exception{
KeyGenerator keyGen = Instance("DES");
keyGen.init(56);
SecretKey secretKey = ateKey();
Encoded();
}
/*
* DES 加密
*/
public static byte[] encrypt(byte[] data, byte[] key) throws Exception{
SecretKey secretKey = new SecretKeySpec(key, "DES");
Cipher cipher = Instance("DES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
byte[] cipherBytes = cipher.doFinal(data);
return cipherBytes;
}
/*
* DES 解密
*/
public static byte[] decrypt(byte[] data, byte[] key) throws Exception{
SecretKey secretKey = new SecretKeySpec(key, "DES");
Cipher cipher = Instance("DES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] plainBytes = cipher.doFinal(data);
return plainBytes;
}
//Test
public static void main(String[] args) throws Exception {
byte[] desKey = DESUtil.initKey();
System.out.println("DES KEY : "+new String(desKey,"UTF-8"));
String DATA = "12345";
byte[] desResult = Bytes() , desKey);
System.out.println(DATA + ">>>DES 加密结果>>>" + new String(desResult,"UTF-8"));
byte[] desPlain = DESUtil.decrypt(desResult, desKey);
System.out.println(DATA + ">>>DES 解密结果>>>" + new String(desPlain));
}
}
打印结果:
DES KEY : �,�����E
12345>>>DES 加密结果>>>Y:(H��
12345>>>DES 解密结果>>>12345
觉得内容还不错的话,给我点个“在看”呗
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论