`encrypt`用于加密数据,`decrypt`用于解密数据

247 阅读2分钟

DES(Data Encryption Standard)算法的加密和解密功能。代码使用了Java加密扩展(Java Cryptography Extension,JCE)中的Cipher类来进行加密和解密操作,同时用DESKeySpecSecretKeyFactory来生成密钥。

这个类包含了两个公开方法:encrypt用于加密数据,decrypt用于解密数据。加密后的数据使用了Base64编码来确保输出结果为可打印的ASCII字符 Java代码实现:

package com.common.util;

import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.util.Base64;

public class DesUtils { private static final String DES ="DES";

/**
 * DES加密
 * @param data 待加密数据
 * @param key 密钥
 * @return 加密后的数据,使用Base64编码
 */
public static  String encrypt(String data,String key){

    try {
        //根据密钥生成密钥规范
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
        //根据密钥规范生成密钥工厂
        SecretKeyFactory instance = SecretKeyFactory.getInstance(DES);
        //根据密钥工厂和密钥规范生成密钥
        SecretKey secretKey = instance.generateSecret(desKeySpec);
        //根据加密算法获取加密器
        Cipher cipher = Cipher.getInstance(DES);
        //初始化加密器,设置加密模式和密钥
        cipher.init(Cipher.ENCRYPT_MODE,secretKey);
        //加密数据
        byte[] bytes = cipher.doFinal(data.getBytes());
        //对加密后的数据进行Base64编码
        return Base64.getEncoder().encodeToString(bytes);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * DES解密
 * @param encryptData 加密后的数据,使用Base64编码
 * @param key 密钥
 * @return 解密后的数据
 */
public static String decrypt(String encryptData,String key)  {

    try {
        //根据密钥生成密钥规范
        DESKeySpec desKeySpec = new DESKeySpec(key.getBytes());
        //根据密钥规范生成密钥工厂
        SecretKeyFactory instance = SecretKeyFactory.getInstance(DES);
        //根据密钥工厂和密钥规范生成密钥
        SecretKey secretKey = instance.generateSecret(desKeySpec);
        //对加密后的数据进行Base64解码
        byte[] decode = Base64.getDecoder().decode(encryptData);




        //根据加密算法获取加密器
        Cipher cipher = Cipher.getInstance(DES);
        //初始化解密器,设置解密模式和密钥
        cipher.init(Cipher.DECRYPT_MODE,secretKey);
        //解密数据
        byte[] bytes = cipher.doFinal(decode);
        //将解密后的数据转换为字符串
        return new String(bytes);
    } catch (Exception e) {
        e.printStackTrace();
    }

    return null;


}

public static void main(String[] args) {
    String data ="你好!!";
    String key ="12345eeertyyewww678";
    String encrypt = encrypt(data, key);
    System.out.println(encrypt);
    String decrypt = decrypt(encrypt, key);
    System.out.println(decrypt);
}

}

DES的算法速度较快,但是在安全性上面并不是最优选择,因为DES算法的密钥长度比较短,被暴力破解和差分攻击的风险比较高,一般推荐用一些更安全的对称加密算法,比如3DES、AES。