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

利用JAVA实现DES加密算法

程序员文章站 2023-02-19 23:43:22
des加密介绍des是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。des加密算法出自ibm的研究,后来被美国*正式采用,之后开始广泛流传,但是近些...

des加密介绍
des是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。des加密算法出自ibm的研究,后来被美国*正式采用,之后开始广泛流传,但是近些年使用越来越少,因为des使用56位密钥,以现代计算能力,24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用des加密算法,本文简单讲解des的java实现。

java实现
加密
代码有详细解释,不多废话。
注意:des加密和解密过程中,密钥长度都必须是8的倍数

复制代码 代码如下:

        public byte[] descrypto(byte[] datasource, string password) {           
                try{
                securerandom random = new securerandom();
                deskeyspec deskey = new deskeyspec(password.getbytes());
                //创建一个密匙工厂,然后用它把deskeyspec转换成
                secretkeyfactory keyfactory = secretkeyfactory.getinstance("des");
                secretkey securekey = keyfactory.generatesecret(deskey);
                //cipher对象实际完成加密操作
                cipher cipher = cipher.getinstance("des");
                //用密匙初始化cipher对象
                cipher.init(cipher.encrypt_mode, securekey, random);
                //现在,获取数据并加密
                //正式执行加密操作
                return cipher.dofinal(datasource);
                }catch(throwable e){
                        e.printstacktrace();
                }
                return null;
        }

解密
代码有详细注释,不多废话
复制代码 代码如下:

        private byte[] decrypt(byte[] src, string password) throws exception {
                // des算法要求有一个可信任的随机数源
                securerandom random = new securerandom();
                // 创建一个deskeyspec对象
                deskeyspec deskey = new deskeyspec(password.getbytes());
                // 创建一个密匙工厂
                secretkeyfactory keyfactory = secretkeyfactory.getinstance("des");
                // 将deskeyspec对象转换成secretkey对象
                secretkey securekey = keyfactory.generatesecret(deskey);
                // cipher对象实际完成解密操作
                cipher cipher = cipher.getinstance("des");
                // 用密匙初始化cipher对象
                cipher.init(cipher.decrypt_mode, securekey, random);
                // 真正开始解密操作
                return cipher.dofinal(src);
        }

测试场景
例如,我们可以利用如上函数对字符串进行加密解密,也可以对文件进行加密解密,如:
复制代码 代码如下:

                //待加密内容
                string str = "测试内容";
                //密码,长度要是8的倍数
                string password = "12345678";
                byte[] result = descrypto.descrypto(str.getbytes(),password);
                system.out.println("加密后内容为:"+new string(result));

                //直接将如上内容解密
                try {
                        byte[] decryresult = des.decrypt(result, password);
                        system.out.println("加密后内容为:"+new string(decryresult));
                } catch (exception e1) {
                        e1.printstacktrace();
                }