欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Java中DES加密/解密的实现[工具类]

程序员文章站 2024-03-14 10:48:58
...

使用前需导入Crypto包:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-crypto</artifactId>
    <version>5.2.1.RELEASE</version>
</dependency>

Utils工具类:

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

/**
 * @author Piconjo
 * @date 2020/6/1  20:15
 */

public class DesUtil {

    private static DesUtil instance;
    private Key key;
    private Cipher encryptCipher;
    private Cipher decryptCipher;

    // **
    private static final String SECRET_KEY="iloveumybaby";

    protected DesUtil() {
    }

    protected DesUtil(String strKey) {
        key = setKey(strKey);
        try {
            encryptCipher = Cipher.getInstance("DES");
            encryptCipher.init(Cipher.ENCRYPT_MODE, key);
            decryptCipher = Cipher.getInstance("DES");
            decryptCipher.init(Cipher.DECRYPT_MODE, key);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }
    }

    // 初始化实例
    public static DesUtil getInstance() {
        if (instance == null) {
            instance = new DesUtil(SECRET_KEY);
        }
        return instance;
    }

    //  根据参数生成KEY
    private Key setKey(String strKey) {
        try {
            KeyGenerator _generator = KeyGenerator.getInstance("DES");
            _generator.init(new SecureRandom(strKey.getBytes()));
            return _generator.generateKey();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    // 加密 - String明文输入 String密文输出
    public String setEncString(String strMing) {
        BASE64Encoder base64en = new BASE64Encoder();
        try {
            byte[] byteMing = strMing.getBytes("UTF-8");
            byte[] byteMi = getEncCode(byteMing);
            return base64en.encode(byteMi);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    // 加密 - byte[]明文输入 byte[]密文输出
    private byte[] getEncCode(byte[] byteS) {
        byte[] byteFina = null;
        try {
            byteFina = encryptCipher.doFinal(byteS);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return byteFina;
    }

    // 解密 - String密文输入 String明文输出
    public String setDesString(String strMi) {
        BASE64Decoder base64De = new BASE64Decoder();
        try {
            byte[] byteMi = base64De.decodeBuffer(strMi);
            byte[] byteMing = getDesCode(byteMi);
            return new String(byteMing, "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    // 解密 - byte[]密文输入 byte[]明文输出
    private byte[] getDesCode(byte[] byteD) {
        byte[] byteFina = null;
        try {
            byteFina = decryptCipher.doFinal(byteD);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return byteFina;
    }

	// 单测
    public static void main(String[] args) {
        DesUtil desUtil = DesUtil.getInstance();

        String code= dtDesUtil.setEncString("[email protected]");
        System.out.println(code);
        System.out.println(dtDesUtil.setDesString(code));
    }
}

使用须知:

使用前 调用DesUtil的getInstance()方法 生成DesUtil类的实例
然后再使用返回的DesUtil对象进行密码加密解密操作

不能直接调用DesUtil里的方法进行加密解密 否则会报空指针异常