`
wangrl
  • 浏览: 152048 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DES加密模式详解

阅读更多
DES加密模式详解
                                     

互联网的软件设计一定少不了加密算法,并且大量使用的都会是对称加密,比较常见的对称加密有:DES、3DES、RC4、AES等等;

加密算法都有几个共同的要点:

    密钥长度;(关系到密钥的强度)
    加密模式;(ecb、cbc等等)
    块加密算法里的填充方式区分;

对于加密模式,很多同学还不清楚,比如DES,也会有ECB、CBC等不同的区分,它们都是标准的;

      Windows加密库中,默认则是CBC模式,也可以手工设置;

      Openssl库要更明显一点,它的函数名里面就写明了,比如:DES_ncbc_encrypt,一看就知道是cbc模式;

      JAVA里面也比较清楚:Cipher c = Cipher.getInstance(”DES/CBC/PKCS5Padding”); 也可以看到是CBC模式



各种加密模式有什么不同呢:(为了方便,这里的加密key都取64位)
电子密码本模式ECB:

最古老,最简单的模式,将加密的数据分成若干组,每组的大小跟加密密钥长度相同;

然后每组都用相同的密钥加密, 比如DES算法, 如果最后一个分组长度不够64位,要补齐64位;

定义:

          Enc(X,Y)是加密函数

          Dec(X,Y)是解密函数

          Key是加密密钥;

          Pi ( i = 0,1…n)是明文块,大小为64bit;

          Ci ( i = 0,1…n)是密文块,大小为64bit;

ECB加密算法可表示为:

          Ci = Enc(Key, Pi)

ECB解密算法可以表示为:

          Pi = Dec(Key,Ci)

    算法 特点:

    每次Key、明文、密文的长度都必须是64位;
    数据块重复排序不需要检测;
    相同的明文块(使用相同的密钥)产生相同的密文块,容易遭受字典攻击;
    一个错误仅仅会对一个密文块产生影响;

加密块链模式CBC:

    与ECB模式最大的不同是加入了初始向量

    定义:

           Enc(X,Y)是加密函数

           Dec(X,Y)是解密函数

           Key是加密密钥;

           Pi ( i = 0,1…n)是明文块,大小为64bit;

           Ci ( i = 0,1…n)是密文块,大小为64bit;

           XOR(X,Y)是异或运算;

           IV是初始向量(一般为64位);

    ECB加密算法可表示为:

           C0 = Enc(Key, XOR(IV, P0)

           Ci = Enc(Key, XOR(Ci-1, Pi)

    ECB解密算法可以表示为:

           P0 = XOR(IV, Dec(Key, C0))

           Pi = XOR(Ci-1, Dec(Key,Ci))

  算法特点:

    每次加密的密文长度为64位(8个字节);
    当相同的明文使用相同的密钥和初始向量的时候CBC模式总是产生相同的密文;
    密文块要依赖以前的操作结果,所以,密文块不能进行重新排列;
    可以使用不同的初始化向量来避免相同的明文产生相同的密文,一定程度上抵抗字典攻击;
    一个错误发生以后,当前和以后的密文都会被影响;

加密反馈模式CFB:

加密反馈模式克服了需要等待8个字节才能加密的缺点,它采用了分组密码作为流密码的密钥流生成器;

    定义:

           Enc(X,Y)是加密函数

           Dec(X,Y)是解密函数

           Key是加密密钥;

           Pi ( i = 0,1…n)是明文块,大小为64bit;

           Ci ( i = 0,1…n)是密文块,大小为64bit;

           Si ( i = 0,1…n),大小为8bit,n个连续的Si组成加密位移寄存器,一般n=8;

           Oi = Enc(Key, Si);

           Lef(x) 为取数据x的最左8个bit位;

           A(x,y)为合并x左移8位,空位用y填充

     CFB加密算法可表示为:

           S0 = IV;

           Oi = Enc(Key, Si);

           Ci = XOR( Ci, Lef(Oi));

           Si = A(Si-1, Ci);

     CFB解密算法可表示为:

           S0 = IV;

           Oi = Enc(Key, Si);

           Ci = XOR( Ci, Lef(Oi));

           Si = A(Si-1, Ci);

    图示:

       



    特点:

    每次加密的Pi和Ci不大于64位;
    加密算法和解密算法相同,不能适用于公钥算法;
    使用相同的密钥和初始向量的时候,相同明文使用CFB模式加密输出相同的密文;
    可以使用不同的初始化变量使相同的明文产生不同的密文,防止字典攻击;
    加密强度依赖于密钥长度;
    加密块长度过小时,会增加循环的数量,导致开销增加;
    加密块长度应时8位的整数倍(即字节为单位);
    一旦某位数据出错,会影响目前和其后8个块的数据;

输出反馈模式OFB:

与CFB模式不同之处在于, 加密位移寄存器与密文无关了,仅与加密key和加密算法有关;

做法是不再把密文输入到加密移位寄存器,而是把输出的分组密文(Oi)输入到一位寄存器;

    定义:

           Enc(X,Y)是加密函数

           Dec(X,Y)是解密函数

           Key是加密密钥;

           Pi ( i = 0,1…n)是明文块,大小为64bit;

           Ci ( i = 0,1…n)是密文块,大小为64bit;

           Si ( i = 0,1…n),大小为8bit,n个连续的Si组成加密位移寄存器,一般n=8;

           Oi = Enc(Key, Si);

           Lef(x) 为取数据x的最左8个bit位;

           A(x,y)为合并x左移8位,空位用y填充

    CFB加密算法可表示为:

           S0 = IV;

           Oi = Enc(Key, Si);

           Ci = XOR( Ci, Lef(Oi));

           Si = A(Si-1, Oi);         注意这里与CFB模式的不同

    CFB解密算法可表示为:

           S0 = IV;

           Oi = Enc(Key, Si);

           Ci = XOR( Ci, Lef(Oi));

           Si = A(Si-1, Oi);

    特点:

    与CFB类似,以下都是不同之处;
    因为密文没有参与链操作,所以使得OFB模式更容易受到攻击;
    不会进行错误传播,某位密文发生错误,只会影响该位对应的明文,而不会影响别的位;
    不是自同步的,如果加密和解密两个操作失去同步,那么系统需要重新初始化;
    每次重新同步时,应使用不同的初始向量。可以避免产生相同的比特流,避免”已知明文”攻击 ;


Windows API进行加密参数设置:

    CryptGetKeyParam可以对HCRYPTKEY对象的各种参数进行查询,包括加密模式、padding方式等;但这个函数不能用于查询加密key的明文;

    但如果需要看到真正加密的key是什么,则需要另外的API:CryptExportKey,选择PLAINTEXTKEYBLOB方式进行导出可以得到key的明文;


使用加密要注意的地方:

    当两个封装好的加密算法对8byte数据进行DES加密时,如果加密出来的结果是一样的,千万不要认为这两个算法可以互换;

    因为ECB模式,和向量全为0的CBC模式得到的密文前8byte,确实是一样,但后面的密文就不一样了;

使用加密以前确定你理解了它;


互联网程序中加密模式的使用:

    ECB是不推荐的方式,Key相同时,相同的明文在不同的时候产生相同的明文,容易遭到字典攻击;

    CBC由于加入了向量参数,一定程度上抵御了字典工具,但缺点也随之而来,一旦中间一个数据出错或丢失,后面的数据将受到影响;

    CFB与CBC类似,好处是明文和密文不用是8bit的整数倍,中间一个数据出错,只影响后面的几个块的数据;

    OFB比CFB方式,一旦一个数据出错,不会影响后面的数据,但安全性降低;

    因此,推荐使用CFB方式,但每个数据包单独加密,否则一个数据包丢失,需要做很多容错处理;

    当然,具体问题也要具体分析,对于只需要”特定安全性”①,不需要”计算安全性”以上的软件,也可以使用ECB模式;

【作者: Liberal】【访问统计:551】【2010年04月14日 星期三 13:09】【注册】【打印】
分享到:
评论

相关推荐

    DES加密算法详解

    ### DES加密算法详解 #### 一、概述 **DES(Data Encryption Standard)**,即数据加密标准,是一种广泛使用的对称加密算法。该算法由IBM公司于20世纪70年代初开发,并于1977年被美国国家标准局采纳为联邦信息处理...

    MD5 RAS DES 加密算法详解

    ### MD5 RAS DES 加密算法详解 #### MD5算法:信息安全的守护者 MD5,全称为Message-Digest Algorithm 5,是由MIT的计算机科学实验室与RSA Data Security Inc.共同研发的一种散列函数,其设计目的是为了保障信息的...

    AES-RSA-DES加密算法详解

    网络安全中的对称加密AES、DES和非对称加密算法RSA详解

    数据加密中的DES加密算法详解.docx

    数据加密中的 DES 加密算法详解 数据加密技术是计算机信息保护的最实用和最可靠的方法,被广泛应用到信息安全的各个领域。信息加密技术是一门涉及数学、密码学和计算机的交叉学科。现代密码学的发展,使信息加密技术...

    Qt写的DES加密算法展示程序

    **Qt DES加密算法展示程序详解** Qt是一个跨平台的C++图形用户界面应用程序开发框架,它为开发者提供了丰富的工具和库,使得构建GUI应用变得容易。在这个“Qt写的DES加密算法展示程序”中,我们将深入探讨DES(Data...

    数据加密中的DES加密算法详解.doc

    ### 数据加密中的DES加密算法详解 #### 一、概述 数据加密标准(Data Encryption Standard,简称DES)是一种广泛使用的对称加密算法。自1970年代由美国国家标准局(现在的国家标准与技术研究院NIST)采纳以来,DES...

    DES加密算法实验

    ### DES加密算法实验知识点 #### 一、实验背景与目的 **DES(Data Encryption Standard)加密算法**是一种经典的对称加密技术,在信息安全领域占据着重要地位。本实验旨在通过实践操作,加深对DES算法工作原理的...

    数据加密中的DES加密算法详解

    本文详细介绍了DES数据加密算法的原理,并给出了一个例子演示了如何使用c#中的加密包进行DES算法加密, 最后对DES进行了评价

    基于3des加密解密工具

    3DES,全称为三重数据加密标准(Triple Data Encryption Algorithm),是DES加密算法的一种强化版本。DES是一种古老的对称加密算法,由IBM在1970年代初开发,后被美国国家标准局采纳为商业和政府的标准。然而,随着...

    chilkat 3des 加密

    总结来说,Chilkat 3DES模块是Python开发中一个实用的加密工具,它提供了一种简单易用的方式,帮助开发者在项目中实现3DES加密和解密,从而保护敏感信息的安全。无论是在Web应用、数据库加密,还是在文件保护等领域...

    js&java DES加密互通

    **JavaScript与Java DES加密互通详解** 在Web应用开发中,数据的安全传输是非常关键的一环,尤其是在涉及用户敏感信息时。JavaScript(JS)作为前端的主要脚本语言,而Java则广泛应用于后端服务,两者之间的数据...

    DES加密算法及示例

    DES加密算法及示例

    QR码DES加密与解密小详解

    ### QR码DES加密与解密小详解 #### 引言 在信息时代,数据安全成为企业和个人关注的焦点。二维码,尤其是QR码,因其信息容量大、可靠性高、支持多种纠错等级以及保密防伪性强等特性,在全球范围内得到了广泛应用。...

    用vc++实现des加密

    **DES加密算法详解** DES算法由IBM公司于1970年代初开发,后被美国国家标准局采纳为数据加密标准,因此得名DES。DES算法基于Feistel网络结构,它将明文数据分为左右两半,然后通过16轮迭代的加密过程,每轮包含替换...

    DES CBC模式 加密算法

    ### 三、CBC模式下的DES加密过程 #### 1. 初始化阶段 - **初始化向量 (IV)**:选择一个随机的 64 位值作为初始向量。 - **密钥扩展**:原始的 64 位密钥经过 PC-1 表进行置换,得到 56 位的密钥,再分为 C 和 D 两...

    java实现的DES加密算法详解

    java实现的DES加密算法详解 java实现的DES加密算法是对称加密算法的一种,主要用于数据加密和解密。下面是java实现的DES加密算法的知识点: 一、DES加密算法介绍 * DES加密算法需要密钥必须是8个字节,即64bit...

    【DES加密算法技术文档】详解DES加密算法的原理与Java实现

    des算法 【DES加密算法技术文档】详解DES加密算法的原理与Java实现

    DES加密算法全过程

    ### DES加密算法全过程详解 #### 实验目标与背景 数据加密标准(DES,Data Encryption Standard)作为一种经典的对称加密算法,在信息安全领域具有重要的历史地位。本篇内容将深入解析DES算法的工作原理及其加密...

    DES加密算法JAVA代码

    ### DES加密算法JAVA代码知识点详解 #### 一、概述 数据加密标准(Data Encryption Standard,简称DES)是一种广泛使用的对称密钥加密技术。在Java中实现DES加密解密功能通常涉及以下几个关键类:`javax.crypto....

Global site tag (gtag.js) - Google Analytics