精华内容
下载资源
问答
  • 在openssl或其他密码相关资料中,我们经常看到对称加密算法有ECB、CBC之类加密模式的简称,到底这些加密模式是什么呢?它们之间有什么不同呢,今天就是为大家解开这个迷。 在现有的对称加密算法中,主要有4种加密...

    在openssl或其他密码相关的资料中,我们经常看到对称加密算法有ECB、CBC之类加密模式的简称,到底这些加密模式是什么呢?它们之间有什么不同呢,今天就是为大家解开这个迷。
    在现有的对称加密算法中,主要有4种加密处理模式,这4种加密处理模式一般是针对块加密算法而言的,如DES算法。这4种加密模式罗列如下: 模式中文描述 英文名称(Openssl缩写)
    电子密码本模式 Electronic Code Book(ECB)
    加密块链模式 Cipher Block Chaining(CBC)
    加密反馈模式 Cipher Feedback Mode(CFB)
    输出反馈模式 Output Feedback Mode(OFB)

    下面我们分别介绍这4种加密模式。
    【电子密码本模式】(ECB)
    这种模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。比如DES算法,一个64位的密钥,如果采用该模式加密,就是将要加密的数据分成每组64位的数据,如果最后一组不够64位,那么就补齐为64位,然后每组数据都采用DES算法的64位密钥进行加密。下图:


    My name |is Drago|nKing

    上图“My name is DragonKing”这句话每8个字符(64位)作为一块,然后使用一个相同的64位的密钥对每个块进行加密,最后一块不足64位,就补齐后再进行加密。
    可以看到,因为ECB方式每64位使用的密钥都是相同的,所以非常容易获得密文进行密码破解,此外,因为每64位是相互独立的,有时候甚至不用破解密码,只要简单的将其中一块替换就可以达到黑客目的。
    【加密块链模式】(CBC)
    该模式如下图所示:
    在这里插入图片描述
    从这两个图中大家可以看到,CBC模式的加密首先也是将明文分成固定长度(64位)的块(P0,P1…),然后将前面一个加密块输出的密文与下一个要加密的明文块进行XOR(异或)操作计算,将计算结果再用密钥进行加密得到密文。第一明文块加密的时候,因为前面没有加密的密文,所以需要一个初始化向量(IV)。跟ECB方式不一样,通过连接关系,使得密文跟明文不再是一一对应的关系,破解起来更困难,而且克服了只要简单调换密文块可能达到目的的攻击。
    但是该加密模式的缺点是不能实时解密,也就是说,必须等到每8个字节都接受到之后才能开始加密,否则就不能得到正确的结果。这在要求实时性比较高的时候就显得不合适了。所以才有了下面两种加密模式。
    【加密反馈模式】(CFB)
    加密反馈模式为了克服必须等待8个字节全部得到才能进行解密的缺点,采用了一个64位(8个字节)的位移寄存器来获得密文,如下图所示:
    在这里插入图片描述
    上面两个图中C2、C3以及P10等都是一个字节(8位)的数据,所以能够实现字符的实时加密和解密,不用再等到8个字节都接受到之后再进行解密。图示是在进行第10个字节数据的加密和解密过程,在该过程中,先从移位寄存器取8个字节的数据(C2到C9)用密钥进行加密,然后取加密数据最左边的一个字节跟输入的明文P10进行XOR(异或)操作,得到的值作为输出密文C10,同时将C10送入到移位寄存器中。
    需要注意的是,如果其中有一个字节的密文在传输的时候发生错误(即使是其中的一位),那么它出现在移位寄存器期间解密的8个字节的数据都会得不到正确的解密结果,当然,这8个字节过去之后,依然可以得到正确的解密结果。但是一个比特错误就影响到8个字节(64个比特)的正确结果,导致鲁棒性太差,所以就又提出了下面的加密模式OFB。
    【输出反馈模式】(OFB)
    输出反馈模式OFB跟CFB几乎是一样的,除了其以为寄存器的输入数据稍微有一点不同之外,如下图:
    在这里插入图片描述
    可以看到,这种方法因为没有采用密文作为加密的数据,所以克服了由于传输过程中由于单个比特导致64个相关比特解密失败的情况,在本模式下,如果一个比特发生错误了,那么只会影响其本身对应的一个比特,而不会影响别的。但是相对于其它模式,因为数据之间相关性小,这种加密模式是比较不安全的,所以在应用的时候除非特别需要,一般不提倡应用OFB模式。

    展开全文
  • 对称加密算法都会使用加密模式,比如 cbc模式 ecb 模式等。本文介绍四种常见的加密模式:ECB、CBC、CFB、OFB。 ...原理如下图: ...明文被分成等长的小块(长度取决于加密算法的加密单位)、每一块使用秘钥...

    对称加密算法都会使用加密模式,比如 cbc模式 ecb 模式等。本文介绍四种常见的加密模式:ECB、CBC、CFB、OFB。

    电子密码本模式   Electronic Code Book(ECB):

    原理如下图:

    明文被分成等长的小块(长度取决于加密算法的加密单位)、每一块使用秘钥单独加密成密文,小块之间相互独立。

    优点:

    1.简单;

    2.每个加密块相互独立,没有依赖关系,有利于并行计算,且 误差不会被传送

    缺点:

    不安全,易破解。

    加密块链模式 Cipher Block Chaining(CBC):

    原理如下图:

    2CBC.jpg

    将明文分成固定长度,将前面一个加密块输出的密文与下一个要加密的明文块进行XOR(异或)操作计算,将计算结果再用密钥进行加密得到密文

    第一明文块加密的时候,因为前面没有加密的密文,所以需要一个初始化向量(IV)

    优点:

    1.不容易主动攻击,安全性好于ECB,适合传输长度长的报文。

    缺点:

    1.每个加密块依赖于前一个加密快,不利于并行计算;且若有误差,影响后面的块,即误差传递;

    2.需要初始化向量IV

    加密反馈模式 Cipher Feedback Mode(CFB):

    原理如下图:

    用一个length位的位移寄存器(length 为加密算法的加密单位),每次处理n位的数据(n通常为8,一字节),加密过程是对位移寄存器进行加密。

    使用加密后的位移寄存器的高n位与n位明文加密的密文块,再使用密文填充寄存器,重复这个过程。

     优点:

    1.分组密码转化为流模式;

    2.可以及时加密传送小于分组的数据;

    缺点:

    1.不利于并行计算;

    2.误差传送:一个明文单元损坏影响多个单元;

    3.需要IV;

    输出反馈模式  Output Feedback Mode(OFB):

    原理如下图:

     

    用一个length位的位移寄存器(length 为加密算法的加密单位),每次处理n位的数据(n通常为8,一字节),加密过程是对位移寄存器进行加密。

    使用加密后的位移寄存器的高n位与n位明文加密的密文块,再使用位移寄存器加密结果高n位移至最后,填充寄存器,重复这个过程。

     优点:

    1.分组密码转化为流模式;

    2.可以及时加密传送小于分组的数据;

    3.每个加密快都是与位移寄存器异或计算,相互之间没有依赖关系,避免的误差传送。

    缺点:

    不利于并行计算;

     

    参考资料:http://www.cnblogs.com/happyhippy/archive/2006/12/23/601353.html

    转载于:https://my.oschina.net/ashnah/blog/870509

    展开全文
  • 互联网软件设计一定少不了加密算法,并且大量使用都会是对称加密,比较常见的对称加密有:DES、3DES、RC4、AES等等; 加密算法都有几个共同要点: 密钥长度;(关系到密钥强度)加密模式;...
    互联网的软件设计一定少不了加密算法,并且大量使用的都会是对称加密,比较常见的对称加密有: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模式;



    展开全文
  • 对称算法分类及加密模式

    千次阅读 2017-03-09 22:15:48
    对称算法分类流加密(stream cipher)加密和解密双方使用相同伪随机加密数据流(即密钥),一般都是逐位异或或者随机置换数据内容,常见加密算法如RC4。 流加密中,密钥长度和明文长度是一致。假设明文...

    对称算法分类

    流加密(stream cipher)

    加密和解密双方使用相同伪随机加密数据流(即密钥),一般都是逐位异或或者随机置换数据内容,常见的流加密算法如RC4。

    流加密中,密钥的长度和明文的长度是一致的。假设明文的长度是n 比特,那么密钥也为n比特,可选择的密钥数量为:

    2n
    因此暴力破解流密码是很难的。

    加解密过程

    明文P和密文S通过密钥K和异或操作进行转换。

    PK=S
    SK=P

    关键技术

    流密码的关键技术在于设计一个良好的##密钥流生成器##,即由种子密钥通过密钥流生成器生成伪随机流。
    通信双方交换种子密钥即可(已拥有相同的密钥流生成器)。

    分组加密(block cipher)

    也叫块加密,将明文分成多个等长的模块(block),使用确定的算法和对称密钥对每组分别加密解密。

    加密模式

    对称算法有以下5种加密模式:

    加密模式(英文名称及简写) 中文名称 特点
    Electronic Code Book(ECB) 电子密码本模式 简单快速,可并行计算
    Cipher Block Chaining(CBC) 密码分组链接模式 仅解密支持并行计算
    Cipher Feedback Mode(CFB) 加密反馈模式 仅解密支持并行计算
    Output Feedback Mode(OFB) 输出反馈模式 不支持并行运算
    Counter (CTR) 计算器模式 支持并行计算

    ECB

    ECB模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。

    相同的明文会产生相同的密文。
    其缺点是:电子密码本模式用一个密钥加密消息的所有块,如果原消息中重复明文块,则加密消息中的相应密文块也会重复。
    因此,电子密码本模式适于加密小消息。

    这里写图片描述

    CBC

    需要初始化向量IV(长度与分组大小相同)参与计算第一组密文,第一组的密文与第二组数据XOR计算后再进行加密产生第二组密文 。

    安全性较好,TLS、IPSec等标准的推荐模式,但不利于并行运算。
    加密运算不支持并行,解密运算支持并行。

    这里写图片描述
    这里写图片描述

    CFB

    面向字符的应用程序的加密要使用流加密法,可以使用加密反馈模式。在此模式下,数据用更小的单元加密,如可以是8位,这个长度小于定义的块长(通常是64位)。其加密步骤是:
    1、使用length位的初始化向量。初始化向量放在移位寄存器中,在第一步加密,产生相应的length位初始化密文K;
    2、初始化密文K高n位与明文前n位进行异或运算,产生密文第一部分c(密文块0),然后将c传输到接收方;
    3、向量的位(即初始化向量所在的移位寄存器内容)左移n位,在移位寄存器最右边的n位填入c的内容,使其为不可预测的数据;
    4、重复第1-3步,直到加密所有的明文单元。

    仅解密支持并行计算

    这里写图片描述
    这里写图片描述

    OFB

    输出反馈模式与CFB相似,惟一差别是,CFB中密文填入加密过程下一阶段,而在OFB中,初始化向量加密过程的输出K的高n位填入加密过程下一阶段。

    可事先进行加密、解密的准备,将分组密码转化为流模式。

    不支持并行运算。

    这里写图片描述

    这里写图片描述

    CTR

    计算器模式(Counter (CTR))不常见,在CTR模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密。支持并行计算

    这里写图片描述
    这里写图片描述

    ref:
    http://professor.blog.51cto.com/996189/1794740
    http://www.cnblogs.com/littleatp/p/6196092.html

    展开全文
  • 对称算法的四种加密模式

    千次阅读 2013-01-19 05:43:01
    对称算法主要有四种加密模式: (1) 电子密码本模式 Electronic Code Book(ECB) 这种模式是最早采用和最简单模式,它将加密数据分成若干组,每组大小跟加密密钥长度相同,然后每组都用相同密钥进行加密。 ...
  • 在现有的对称加密算法中,主要有4种加密处理模式,这4种加密处理模式一般是针对块加密算法而言,如DES算法。这4种加密模式罗列如下: 模式中文描述 英文名称(Openssl缩写) 电子密码本模式 Electronic Code...
  • 对称密钥算法的数据加密模式分组加密模式序列加密模式 对称密钥算法的数据加密方式分为两类:分组加密和序列加密。 分组加密模式又称为块加密,是将要处理的数据分成固定的长度,然后在这固定长度的数据上使用密码...
  • 常见对称加密算法与工作模式简介

    千次阅读 2019-04-07 22:15:40
    ... 对称密码(Symmetric Cipher)算法又叫传统密码算法,加密密钥能够从...对称算法的安全性依赖于密钥,所以密钥的保密性对通信的安全性至关重要;在安全通信之前,需要有一个安全通道以商定密钥。 加密和解密...
  • # 对称加密算法的分组模式及其Go语言实现之前介绍的DES、3DES、AES加密算法,只能加密固定长度的明文。如果需要加密任意长度的明文,需要对明文分组加密。DES、3DES、AES等又称分组密码,而分组有很多模式,如:ECB...
  • 之前介绍DES、3DES、AES加密算法,只能加密固定长度明文。如果需要加密任意长度明文,需要对明文分组加密。DES、3DES、AES等又称分组密码,而分组有很多模式,如:ECB模式、CBC模式、CFB模式、OFB模式、CTR...
  • 对称加密算法 对称加密算法,也叫做私钥加密算法,也叫做单密钥算法或...加密模式 ECB:电子密码本模式 CBC:密码分组链接模式(常用) CFB:加密反馈模式 OFB:输出反馈模式 DES(Data Encryption Standard,即
  • CBC模式的加密CBC模式的解密CFB模式CFB模式的加密CFB模式的解密OFB模式CFB模式的加密CFB模式的解密CTR模式CTR模式的加密CTR模式的解密对称密码中常见的又ECB、CBC、CFB、OFB 和 CTR等模式。 下面我们对这些模式的...
  • package main import ( ...//aes是对称加密算法的一种,Ctr是分组迭代模式的一种,需要初始向量,使用了流密钥而非分组密钥 func aesEncrypt(plainText, key []byte) ([]byte, error) { //1 ...
  • 安全架构-加密算法-对称加密

    千次阅读 2020-12-21 21:50:03
    安全架构-加密算法-对称加密 本系列安全架构文章中,之前谈到了api接口签名防止数据篡改,但是关键数据在...文章目录安全架构-加密算法-对称加密前言一、简介二、特点三、常见算法四、加密填充模式五、加密算法的选择六
  • (要理解AES的加密流程,会涉及到AES的五个关键词:分组密码体制、Padding、初始向量IV、密钥、四种加密模式)  3、AES的加密原理 (要理解AES的加密原理,会涉及到AES的四个关键词:密钥扩展、初始轮、重复轮、...
  • 对称算法使用一个密钥,给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同。解密时,使用密钥与加密密钥相同。对称算法主要有四种加密模式如下。
  • 对称算法 对称算法一般分为流加密(按照单个bit位或byte字节进行运算)和块加密(根据特定长度分块进行运算)两种类型。 常见的对称算法基本都属于块加密算法,...若数据长度L,对称算法的分块长度B,则需填充B-...
  • 对称算法主要有四种加密模式: ①电子密码本模(Electronic Code Book(ECB)) 这种模式是最早采用和最简单模式,它将加密数据分成若干组,每组大小跟加密密钥长度相同,然后每组都用相同密钥
  • java中常用的对称加密算法

    千次阅读 2018-01-16 10:45:00
    java中用到的对称加密算法获取和使用,以及加密算法分组模式和填充意义
  • JAVA加密解密系列Java 加密解密之对称加密算法DESedeDESede即三重 DES加密算法,也被称为3DES或者Triple DES。使用三(或两)个不同密钥对数据块进行三次(或两次)DES加密(加密一次要比进行普通加密的三次要快)。三重...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 641
精华内容 256
关键字:

对称算法的加密模式