美文网首页
DES加密技术原理及其实现方式

DES加密技术原理及其实现方式

作者: SsmallLucky | 来源:发表于2018-09-25 16:38 被阅读0次

DES(Data Encryption Standard),是一种流行于上世纪80年代的数据加密算法系列,其原始思想诞生于参照二战德国的恩尼格玛机。与传统密码大多是循环移位不同,恩尼格玛机在这个基础之上进行了扩散模糊。但本质原理基本相同。

传统的DES加密使用一个56位的密钥和8位的奇偶校验位,产生总共64位的分组大小,再利用Feistel技术将其分成两半,各自做应用循环计算,并将得到各自得到的结果进行异或运算,然后交换这两半,继续循环,直到最后一个循环不做交换为止。这种加密方式一共使用16次循环,可以进行异或,置换,代换,移位操作四种基本运算。

由于其安全问题,DES加密后来经过修改,扩展成了3DES(Triple DES,也被称为 DES ede——DES encrypt decrypt encrypt)加密技术,3DES最主要的提升在于将密钥升级为168位并三次使用3DES加密技术,这样做极大地提高了DES安全性,且如果三个56位的子元素均相同,则其兼容DES技术。

DES通常的破解方式是进行或穷举,重复尝试各种密钥直到它们验证通过为止,在计算机计算能力疲软的过去,这样的加密方式尚满足人们的需求,但随着计算系统能力的提高,破解也越来越容易,所以后来在DES的基础上,人们开发了新的加密方式——高级加密标准(AES Advanced Encryption Standard)。

产生过程大致清楚后,接下来看下面一段代码:

Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");

这段代码中,desede/CBC/PKCS5Padding等价于desede。
第一段为加密算法名称;第二段为分组加密模式,常用的有ECB和CBC等;第三段为分组的填充模式,需要加密的明文很多时候并不是64的倍数,所以经过加密之后需要对每一对不满足64位的分组进行填充,PKCS5Padding是最常用的填充方式,也是默认选项。

实现方式(解密):

public static String decryptString(String src) {
    try {
        // REQUEST_SECRETKEY 秘钥
        Key deskey = null;
        DESedeKeySpec spec = new DESedeKeySpec(REQUEST_SECRETKEY.getBytes());
        SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
        deskey = keyfactory.generateSecret(spec);
        Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");
        // REQUEST_IV 向量
        IvParameterSpec ips = new IvParameterSpec(REQUEST_IV.getBytes());

        cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
        byte[] decryptData = cipher.doFinal(hex2byte(src));
        return new String(decryptData, encoding);


    } catch (java.security.NoSuchAlgorithmException e1) {
        e1.printStackTrace();
    } catch (javax.crypto.NoSuchPaddingException e2) {
        e2.printStackTrace();
    } catch (Exception e3) {
        e3.printStackTrace();
    }
    return null;

}

实现方式:(加密)

public static String encryptString(String src) {
    try {

        // REQUEST_SECRETKEY 秘钥
        Key deskey = null;
        DESedeKeySpec spec = new DESedeKeySpec(REQUEST_SECRETKEY.getBytes());
        SecretKeyFactory keyfactory = SecretKeyFactory
                .getInstance("desede");
        deskey = keyfactory.generateSecret(spec);

        Cipher cipher = Cipher.getInstance("desede/CBC/PKCS5Padding");
        // REQUEST_IV 向量
        IvParameterSpec ips = new IvParameterSpec(REQUEST_IV.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
        byte[] encryptData = cipher.doFinal(src.getBytes(encoding));
        return StringUtils.byte2hex(encryptData);

    } catch (java.security.NoSuchAlgorithmException e1) {
        e1.printStackTrace();
    } catch (javax.crypto.NoSuchPaddingException e2) {
        e2.printStackTrace();
    } catch (Exception e3) {
        e3.printStackTrace();
    }
    return null;
}

以上代码为简单的3DES加密解密应用,开发者可以自定义IV和key实现效果。

相关文章

  • DES加密技术原理及其实现方式

    DES(Data Encryption Standard),是一种流行于上世纪80年代的数据加密算法系列,其原始思...

  • iOS 常见加密方式 - 对称加密(3DES,AES)

    对称加密,是指使用单一密匙来进行加密和解密。目前较常见的对称加密有DES,3DES, AES等。原理类似,加密方式...

  • DES加密简单使用

    这两天使用了DES加密对Token加密存入cookie。 首先是使用DES加密算法,算法的具体原理及实现没有完全了...

  • Des

    常用加密算法的Java实现总结 对称加密算法DES、3DES和AES 算法原理DES算法把64位的明文输入块变为6...

  • 密码学中的对称加密和非对称加密

    一、对称加密概念:加密和解密用同一对密钥的加密技术,叫对称加密。加密方式:DES、3DES、AES,安全性依次从低...

  • 对称加密与非对称加密

    一.对称加密 常用的对称加密DES、AES,DES也有衍生的3DES等加密方式 对称加密用到的加密模式有ECB、C...

  • Java 实现 DES 加密

    本文介绍 Java 语言实现 DES 加密的方法。 目录 DES 简介 代码实现ECBCBCCTR DES 简介 ...

  • 2.2 DES/3DES算法 -- 算法介绍

    对称加密技术 - DES、3DES算法简介 DES算法和DESSede算法统称DES系列算法,是对称加密算法领域的...

  • 2.2 DES/3DES算法Java用法

    对称加密技术 - DES系列的Java用法 Java中的用法 JDK仅仅提供了针对56位密钥长度的DES算法实现,...

  • java 各加密算法示例(下)

    对称加密算法(JDK和BC实现方式) DES (是数据加密标准,很多年前常用,已被破解不具备安全性)3DES(三重...

网友评论

      本文标题:DES加密技术原理及其实现方式

      本文链接:https://www.haomeiwen.com/subject/csdloftx.html