发表于: 2021-12-07 22:39:05
0 874
今天完成的事:学习加密算法
对称加密算法。单密钥,算法公开,计算量少加密速度快
常用的对称加密算法有 DES; 3DES ,RC4 RC5 IDEA
HTTPS 传输数据用的是对称加密
非对称加密算法 (双密钥加密)
公钥加密
私钥解密
单向传输加密数据 防止中间攻击
用于身份验证 和数据校验
常用的非对称加密算法有:RSA DSA ECC Diffie-Hellman
摘要算法。 (通常用来签名校验)
也称哈希算法,散列算法
将任意长度的数据转换成一个定长不可逆的数据
只要原文不通,计算的结果必然不同(几乎不用开路重复的情况)
常用的算法有:MD5 SHA-1 MAC CRC等
广泛用户数的完整性和敏感的传输和保存
MD5 可以生成128位的散列值
摘要算法无法防止碰撞(彩虹表攻击) 不适用于安全性认证(如SSL公开密钥或者数字签名)
在项目中使用DES 加密 解密
public class DesEncryption {
public String encryption(String encryptiontext, String encryptKey)throws Exception{
// 明文
String encryption=encryptiontext;
//密钥
String encryptionKey= encryptKey;
String text = encrypt(encryption, encryptionKey);
//返回加密后的数据
return text;
}
public String desDecry(String encryptiontext, String encryptKey)throws Exception{
//明文
String text=encryptiontext;
//密钥
String encryptionKey= encryptKey;
String decry = decrytion(text, encryptionKey);
//返回解密后的数据
return decry;
}
private static String decrytion(String text, String encryptionKey) throws Exception {
// 获得加密工具类对象
Cipher cipher = Cipher.getInstance("DES");
//初始化工具类
SecretKeySpec key =getKey(encryptionKey);
cipher.init(Cipher.DECRYPT_MODE,key);
// 将Base64 转为byte数组
byte[] decode = Base64.getDecoder().decode(text);
// 解密
byte[] bytes= cipher.doFinal(decode);
//返回解密后的数据
return new String(bytes);
}
private static String encrypt(String encryption, String buffer) throws Exception{
//获得加密工具类对象
Cipher cipher = Cipher.getInstance("DES");
// 初始化 mode:加密or解密
SecretKeySpec key=getKey(buffer);
cipher.init(Cipher.ENCRYPT_MODE,key);
//用加密工具类对明文加密
byte[] doFinal = cipher.doFinal(encryption.getBytes());
//返回加密后的数据
return new String(Base64.getEncoder().encode(doFinal));
}
private static SecretKeySpec getKey(String encryptionKey) {
byte[] buffer = new byte[8];
byte[] bytes = encryptionKey.getBytes();
for (int i = 0; i < 8 && i<bytes.length; i++) {
buffer[i] = bytes[i];
}
//根据给定的数组构造一个密钥
SecretKeySpec key = new SecretKeySpec(buffer, "DES");
return key;
}
}
测试类:
@Test
public void decrypt() throws Exception{
DesEncryption desEncryption=new DesEncryption();
System.out.println(desEncryption.encryption("色看风使舵返回", "梦在远方"));
System.out.println(desEncryption.desDecry("bMCh3KJguoNbIPdxK2SbVtax2KdUAY9I","梦在远方"));
}
}
结果
bMCh3KJguoNbIPdxK2SbVtax2KdUAY9I
色看风使舵返回
明天的的目标:用户注册登陆
项目中使用DES 给用户名加密 用MD5给密码加密
评论