基于hutool实现简单的加解密

在写业务功能的过程中,总是有些敏感数据不能明文的储存,需要在进入数据库时进行加密,相应的在取出使用时就需要进行解密处理。加解密的方法有很多种,这次就只介绍一个在当前项目中用到的一个基于hutool工具包的DES加解密方法。

简介:

DES

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。

密钥加密

密钥加密是发送和接收数据的双方,使用相同的或对称的密钥对明文进行加密解密运算的加密方法。

若加密算法是公开的,那么真正的秘密就在于密钥了,密钥必须是保密的,通常是一个字符串,并且可以按需频繁更换。因此,密钥的长度很重要,因为一旦找到解密密钥也就破译了密码,而密钥的长度越长,密钥空间就越大,遍历密钥空间所花费的时间就越长,破译的可能性也就越小。 

注意:因为des为对称加密,只有一对但密钥,所以加密的安全性主要在于密钥上,必须保证加密解密时密钥相同且安全。

使用:

  • 因为是基于hutool工具包下的des加解密,首先应该选择要使用的hutool包版本并导入。
    
        
        
            cn.hutool
            hutool-all
            ${hutool.version}
        
    
  • hutool工具类的加密解密工具SecureUtil

SecureUtil主要针对常用加密算法构建快捷方式,还有提供一些密钥生成的快捷工具方法。

其中我们需要使用到:

  • SecureUtil.des(key)
  • SecureUtil.generateKey
  • 加密
//生成密钥,并转为字符串,可以储存起来,解密时可直接使用
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded();
String secretKey = new BASE64Encoder().encodeBuffer(key);

//info:需要加密的明文
public String encrypt(String info) {
    byte[] key = new byte[0];
    try {
    key = new BASE64Decoder().decodeBuffer(secretKey);
    } catch (IOException e) {
        e.printStackTrace();
    }
    DES des = SecureUtil.des(key);
    String encrypt = des.encryptHex(info);
    return encrypt;
}
  • 解密
//encrypt:需要解密的密文
public static String decode(String encrypt) {
    byte[] key = new byte[0];
    try {
        key = new BASE64Decoder().decodeBuffer(secretKey);
    } catch (IOException e) {
        e.printStackTrace();
    }
    DES des = SecureUtil.des(key);
    return des.decryptStr(encrypt);
}
  • 偏移

相应的,在des加密的基础上可以在添加一些自己的操作。比如加密后,在密文上固定位置插入某个字符或字符串,或者将密文中的字符进行位置交换等。只要在解密时进行还原就可以,也是可以提高一些数据的安全性。

你可能感兴趣的:(问题,加密解密,java)