发表于: 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给密码加密 










返回列表 返回列表
评论

    分享到