对称加密算法

在对称加密算法中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,生成复杂的加密密文进行发送,数据接收方收到密文后,若想读取原文,则需要使用加密使用的密钥及相同的算法的逆算法对加密的密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发送和接收双方都使用这个密钥对数据进行加密和解密。
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。优势在于加解密的高速度和使用长密钥时的难破解性,但是,对称加密算法的安全性依赖于密钥,泄露密钥就意味着任何人都可以对加密的密文进行解密,因此密钥的保护对于加密信息是否安全至关重要。
常用的对称加密算法包括 DES 算法、3DES 算法、AES 算法等。
1、基于 Java 的 DES 算法的使用
① 生成 DES 密钥
public static String genKeyDES() throws NoSuchAlgorithmException{
  KeyGenerator keyGen = KeyGenerator.getInstance("DES");
  keyGen.init(56);
  SecretKey key = keyGen.generateKey();
  return Base64.getEncoder().encodeToString(key.getEncoded());
}
	
public static SecretKey loadKeyDES(String base64Key) {
  byte[] bs = Base64.getDecoder().decode(base64Key);
  SecretKeySpec keySpec = new SecretKeySpec(bs, "DES");
  return keySpec;
}
通过 KeyGenerator 获取生成器的实例后,设置 DES 算法的密钥为 56 位,便可生成 DES 算法的密钥,并且每次生成的都不相同。为了方便存储,一般将得到的 DES 密钥 Base64 编码成字符串。而将相应的字符串转换成 SecretKey 对象,只需要将密钥 Base64 解码后,传入对应的算法后实例化一个 SecretKeySpec 即可。
② 加密
public static byte[] encryptDES(byte[] source,SecretKey key) throws Exception{
     Cipher cipher = Cipher.getInstance("DES");
     cipher.init(Cipher.ENCRYPT_MODE,key);
     byte[] bs = cipher.doFinal(source);
     return bs;
   }
③解密
public static byte[] decryptDES(byte[] source,SecretKey key) throws Exception{
	Cipher cipher = Cipher.getInstance("DES");
	cipher.init(Cipher.DECRYPT_MODE,key);
	byte[] bs = cipher.doFinal(source);
	return bs;
}
加密与解密需要实例化 Cipher 对象,加密时,Cipher 初始化需要传入加密模式 Cipher.ENCRYPT_MODE 和相应的密钥 SecretKey 的实例,而解密时,传入的参数为 Cipher.DECRYPT_MODE 和相应的密钥 SecretKey
2、基于Java 的 AES 算法使用
① 生成 AES 密钥:
public static String genKeyAES() throws NoSuchAlgorithmException{
	KeyGenerator keyGen = KeyGenerator.getInstance("AES");
	keyGen.init(128);
	SecretKey secretKey = keyGen.generateKey();
	return Base64.getEncoder().encodeToString(secretKey.getEncoded());
}
	
public static SecretKey loadKeyAES(String base64Key){
	byte[] bs = Base64.getDecoder().decode(base64Key);
	SecretKey key = new SecretKeySpec(bs,"AES");
	return key;
}
与 DES 算法的操作类似,不同的是 AES 算法支持 128、192、256 三种密钥长度,加密强度更高,但是,由于美国对于加密软件出口的控制,如果使用 192 位和 256 位的密钥,则需要另外下载无政策和司法限制的文件,否则程序运行会出现异常。
② 加密
public static byte[] encryptAES(byte[] source,SecretKey key) throws Exception{
	Cipher cipher = Cipher.getInstance("AES");
	cipher.init(Cipher.ENCRYPT_MODE, key);
	byte[] bs = cipher.doFinal(source);
	return bs;
}
③ 解密
public static byte[] decryptAES(byte[] source,SecretKey key) throws Exception{
	Cipher cipher = Cipher.getInstance("AES");
	cipher.init(Cipher.DECRYPT_MODE, key);
	return cipher.doFinal(source);
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值