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

Java DES加密解密算法Demo源代码下载

程序员文章站 2022-03-01 13:55:08
...

DES算法简介

DES(Data Encryption Standard)是发明最早的最广泛使用的分组对称加密算法、DES算法的入口参数有三个:Key、Data、Mode、其中Key为8个字节共64位、是DES算法的工作密钥、Data也为8个字节64位、是要被加密或被解密的数据、Mode为DES的工作方式、有两种、加密或解密


Java密码学结构设计遵循两个原则

1、算法的独立性和可靠性

2、实现的独立性和相互作用性


算法的独立性是通过定义密码服务类来获得、用户只需了解密码算法的概念,而不用去关心如何实现这些概念、实现的独立性和相互作用性通过密码服务提供器来实现、密码服务提供器是实现一个或多个密码服务的一个或多个程序包、软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器、安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来设置定义一个提供器


DES算法源代码工具类

public class DesUtil {
	private final static String DES = "DES";
	 
    public static void main(String[] args) throws Exception {
        String data = "123456";
        String key = "abc@1234";
        System.err.println(encrypt(data, key));
        System.err.println(decrypt(encrypt(data, key), key));
 
    }
     
    /**
     * Description 根据键值进行加密
     * @param data 
     * @param key  加密键byte数组
     * @return
     * @throws Exception
     */
    public static String encrypt(String data, String key) throws Exception {
        byte[] bt = encrypt(data.getBytes(), key.getBytes());
        String strs = new BASE64Encoder().encode(bt);
        return strs;
    }
 
    /**
     * Description 根据键值进行解密
     * @param data
     * @param key  加密键byte数组
     * @return
     * @throws IOException
     * @throws Exception
     */
    public static String decrypt(String data, String key) throws IOException,
            Exception {
        if (data == null)
            return null;
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] buf = decoder.decodeBuffer(data);
        byte[] bt = decrypt(buf,key.getBytes());
        return new String(bt);
    }
 
    /**
     * Description 根据键值进行加密
     * @param data
     * @param key  加密键byte数组
     * @return
     * @throws Exception
     */
    private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
        // 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
 
        // 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
 
        // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);
 
        // Cipher对象实际完成加密操作
        Cipher cipher = Cipher.getInstance(DES);
 
        // 用密钥初始化Cipher对象
        cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);
 
        return cipher.doFinal(data);
    }
     
     
    /**
     * Description 根据键值进行解密
     * @param data
     * @param key  加密键byte数组
     * @return
     * @throws Exception
     */
    private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
        // 生成一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
 
        // 从原始密钥数据创建DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
 
        // 创建一个密钥工厂,然后用它把DESKeySpec转换成SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);
 
        // Cipher对象实际完成解密操作
        Cipher cipher = Cipher.getInstance(DES);
 
        // 用密钥初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
 
        return cipher.doFinal(data);
    }
}


以上代码需要引入一个jar包、sun.misc.BASE64Decoder.jar、源代码里面我会把sun.misc.BASE64Decoder.jar上传上去、大家可以在下载的源代码里面找

源代码链接: http://dwtedx.com/download.html?bdkey=s/1bnGqjvT 密码: qh7m