精华内容
下载资源
问答
  • 数据加密算法(Data Encryption Algorithm,DEA)的数据加密标准(Data Encryption Standard,DES)是规范的描述
  • DES算法原理完整版

    万次阅读 多人点赞 2018-02-14 23:25:34
    DES算法使用64位的密钥key将64位的明文输入块变为64位的密文输出块,并把输出块分为L0、R0两部分,每部分均为32位。初始置换规则如下: 注意:这里的数字表示的是原数据的位置,不是数据 58,50,42,34,2...

    1.所需参数

    key:8个字节共64位的工作密钥

    data:8个字节共64位的需要被加密或被解密的数据

    mode:DES工作方式,加密或者解密

    2.初始置换

    DES算法使用64位的密钥key将64位的明文输入块变为64位的密文输出块,并把输出块分为L0、R0两部分,每部分均为32位。初始置换规则如下:

    注意:这里的数字表示的是原数据的位置,不是数据

     

    58,50,42,34,26,18,10,2,
    60,52,44,36,28,20,12,4,
    62,54,46,38,30,22,14,6,
    64,56,48,40,32,24,16,8,
    57,49,41,33,25,17, 9,1,
    59,51,43,35,27,19,11,3,
    61,53,45,37,29,21,13,5,
    63,55,47,39,31,23,15,7,


    即将输入的64位明文的第1位置换到第40位,第2位置换到第8位,第3位置换到第48位。以此类推,最后一位是原来的第7位。置换规则是规定的。L0(Left)是置换后的数据的前32位,R0(Right)是置换后的数据的后32位。

     

    例如:64位输入块是D1~D64,则经过初始置换后是D58,D50...D7。则L0=D58,D50,D12...D8;R0=D57,D49,D41...D7。

    该置换过程是在64位秘钥的控制下。

    3.加密处理--迭代过程

    经过初始置换后,进行16轮完全相同的运算,在运算过程中数据与秘钥结合。

    函数f的输出经过一个异或运算,和左半部分结合形成新的右半部分,原来的右半部分成为新的左半部分。每轮迭代的过程可以表示如下:

    Ln = R(n - 1);

    Rn = L(n - 1)⊕f(Rn-1,kn-1)

    ⊕:异或运算

    Kn是向第N层输入的48位的秘钥,f是以Rn-1和Kn为变量的输出32位的函数

    3.1函数f

    函数f由四步运算构成:秘钥置换(Kn的生成,n=0~16);扩展置换;S-盒代替;P-盒置换。

    3.1.1 秘钥置换--子密钥生成

    DES算法由64位秘钥产生16轮的48位子秘钥。在每一轮的迭代过程中,使用不同的子秘钥。

    a、把密钥的奇偶校验位忽略不参与计算,即每个字节的第8位,将64位密钥降至56位,然后根据选择置换PC-1将这56位分成两块C0(28位)和D0(28位);

    b、将C0和D0进行循环左移变化(注:每轮循环左移的位数由轮数决定),变换后生成C1和D1,然后C1和D1合并,并通过选择置换PC-2生成子密钥K1(48位);

    c、C1和D1在次经过循环左移变换,生成C2和D2,然后C2和D2合并,通过选择置换PC-2生成密钥K2(48位);

    d、以此类推,得到K16(48位)。但是最后一轮的左右两部分不交换,而是直接合并在一起R16L16,作为逆置换的输入块。其中循环左移的位数一共是循环左移16次,其中第一次、第二次、第九次、第十六次是循环左移一位,其他都是左移两位。

    3.1.2 密钥置换选择1---PC-1(子秘钥的生成)

    操作对象是64位秘钥

    64位秘钥降至56位秘钥不是说将每个字节的第八位删除,而是通过缩小选择换位表1(置换选择表1)的变换变成56位。如下:

    注意:这里的数字表示的是原数据的位置,不是数据

     

    57,49,41,33,25,17,9,1,
    58,50,42,34,26,18,10,2,
    59,51,43,35,27,19,11,3,
    60,52,44,36,63,55,47,39,
    31,23,15,7,62,54,46,38,
    30,22,14,6,61,53,45,37,
    29,21,13,5,28,20,12,4

    再讲56位秘钥分成C0和D0:

     

    C0(28位)=K57K49K41...K44K36

     

    57,49,41,33,25,17,9,
    1,58,50,42,34,26,18,
    10,2,59,51,43,35,27,
    19,11,3,60,52,44,36,
    

     

    D0(28位)=K63K55K47...K12K4

    63,55,47,39,31,23,15,
    7,62,54,46,38,30,22,
    14,6,61,53,45,37,29,
    21,13,5,28,20,12,4

    根据轮数,将Cn和Dn分别循环左移1位或2位

     

    循环左移每轮移动的位数如下:

    第一轮是循环左移1位。C0循环左移1位后得到C1如下:

     

    49,41,33,25,17,9,1,
    58,50,42,34,26,18,10,
    2,59,51,43,35,27,19,
    11,3,60,52,44,36,57

    D0循环左移1位后得到D1如下:

     

     

    55,47,39,31,23,15,7,
    62,54,46,38,30,22,14,
    6,61,53,45,37,29,21,
    13,5,28,20,12,4,63

    C1和D1合并之后,再经过置换选择表2生成48位的子秘钥K1。置换选择表2(PC-2)如下:

     

    去掉第9、18、22、25、35、38、43、54位,从56位变成48位,再按表的位置置换。

     

    14,17,11,24,1,5,
    3,28,15,6,21,10,
    23,19,12,4,26,8,
    16,7,27,20,13,2,
    41,52,31,37,47,55,
    30,40,51,45,33,48,
    44,49,39,56,34,53,
    46,42,50,36,29,32

    C1和D1再次经过循环左移变换,生成C2和D2,C2和D2合并,通过PC-2生成子秘钥K2。

     

    以此类推,得到子秘钥K1~K16。需要注意其中循环左移的位数。

    3.1.2 扩展置换E(E位选择表)

    通过扩展置换E,数据的右半部分Rn从32位扩展到48位。扩展置换改变了位的次序,重复了某些位。

    扩展置换的目的:a、产生与秘钥相同长度的数据以进行异或运算,R0是32位,子秘钥是48位,所以R0要先进行扩展置换之后与子秘钥进行异或运算;b、提供更长的结果,使得在替代运算时能够进行压缩。

    扩展置换E规则如下:

     

    32,1,2,3,4,5,
    4,5,6,7,8,9,
    8,9,10,11,12,13,
    12,13,14,15,16,17,
    16,17,18,19,20,21,
    20,21,22,23,24,25,
    24,25,26,27,28,29,
    28,29,30,31,32,1

    3.1.3 S-盒代替(功能表S盒)

     

    Rn扩展置换之后与子秘钥Kn异或以后的结果作为输入块进行S盒代替运算
    功能是把48位数据变为32位数据

    代替运算由8个不同的代替盒(S盒)完成。每个S-盒有6位输入,4位输出。

    所以48位的输入块被分成8个6位的分组,每一个分组对应一个S-盒代替操作。

    经过S-盒代替,形成8个4位分组结果。

    注意:每一个S-盒的输入数据是64位,输出数据是4位,但是每个S-盒自身是64位!!
    每个S-和是4行16列的格式,因为二进制4位是0~15。8个S-盒的值如下:

    S-盒1:

     

    14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,
    0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,
    4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,
    15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,

     

    S-盒2:

     

    15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,
    3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,
    0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,
    13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,

     

    S-盒3:

     

    10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,
    13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,
    13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,
    1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,

     

    S-盒4:

     

    7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,
    13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,
    10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,
    3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,

     

    S-盒5:

     

    2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,
    14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,
    4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,
    11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,

     

    S-盒6:

     

    12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,
    10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,
    9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,
    4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,

     

    S-盒7:

     

    4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,
    13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,
    1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,
    6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,

     

    S-盒8:

     

    13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,
    1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,
    7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,
    2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11,

    S-盒计算过程

     

    以S-盒8为例子,

    假设S-盒8的输入(即异或函数的第43~18位)为110011。

    第1位和最后一位组合形成了11(二进制),对应S-盒8的第3行。中间的4位组成形成1001(二进制),对应S-盒8的第9列。所以对应S-盒8第3行第9列值是12。则S-盒输出是1100(二进制)。

    3.1.4 P-盒置换

    S-盒代替运算,每一盒得到4位,8盒共得到32位输出。这32位输出作为P盒置换的输入块。

    P盒置换将每一位输入位映射到输出位。任何一位都不能被映射两次,也不能被略去。

    经过P-盒置换的结果与最初64位分组的左半部分异或,然后左右两部分交换,开始下一轮迭代。

    P-盒置换表(表示数据的位置)共32位

     

    16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,
    2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25,

    将32位的输入的第16位放在第一位,第七位放在第二位,第二十位放在第三位,以此类推。
     

     

    4.逆置换

    将初始置换进行16次的迭代,即进行16层的加密变换,这个运算过程我们暂时称为函数f。得到L16和R16,将此作为输入块,进行逆置换得到最终的密文输出块。逆置换是初始置换的逆运算。从初始置换规则中可以看到,原始数据的第1位置换到了第40位,第2位置换到了第8位。则逆置换就是将第40位置换到第1位,第8位置换到第2位。以此类推,逆置换规则如下

     

    40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,
    38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,
    36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,
    34,2,42,10,50,18,58 26,33,1,41, 9,49,17,57,25,

     

    注意:DES算法的加密密钥是根据用户输入的秘钥生成的,该算法把64位密码中的第8位、第16位、第24位、第32位、第40位、第48位、第56位、第64位作为奇偶校验位,在计算密钥时要忽略这8位.所以实际中使用的秘钥有效位是56位。详情计算看本文的3.1.2秘钥置换选择。

    秘钥共64位,每次置换都不考虑每字节的第8位,因为这一位是奇偶校验位,所以64位秘钥的第8、16、24、32、40、48、56、64位在计算秘钥时均忽略。

    4.DES算法描述

    1)、输入64位明文数据,并进行初始置换IP;

    2)、在初始置换IP后,明文数据再被分为左右两部分,每部分32位,以L0,R0表示;

    3)、在秘钥的控制下,经过16轮运算(f);

    4)、16轮后,左、右两部分交换,并连接再一起,再进行逆置换;

    5)、输出64位密文。

     

    5.DES解密

    加密和解密可以使用相同的算法。加密和解密唯一不同的是秘钥的次序是相反的。就是说如果每一轮的加密秘钥分别是K1、K2、K3...K16,那么解密秘钥就是K16、K15、K14...K1。为每一轮产生秘钥的算法也是循环的。加密是秘钥循环左移,解密是秘钥循环右移。解密秘钥每次移动的位数是:0、1、2、2、2、2、2、2、1、2、2、2、2、2、2、1。

     

    6.DES算法特点

    1、分组加密算法:

    以64位为分组。64位明文输入,64位密文输出。

    2、对称算法:

    加密和解密使用同一秘钥

    3、有效秘钥长度为56位

    秘钥通常表示为64位数,但每个第8位用作奇偶校验,可以忽略。

    4、代替和置换

    DES算法是两种加密技术的组合:混乱和扩散。先替代后置换。

    5、易于实现

    DES算法只是使用了标准的算术和逻辑运算,其作用的数最多也只有64 位,因此用70年代末期的硬件技术很容易实现

    算法的重复特性使得它可以非常理想地用在一个专用芯片中。

    7 秘钥算法的特点

    优点:

    效率高,算法简单,系统开销小

    适合加密大量数据

    明文长度和密文长度相等

    缺点:

    需要以安全方式进行秘钥交换

    秘钥管理复杂

     

    展开全文
  • DES算法原理

    2012-12-12 13:03:42
    数据加密算法(Data Encryption Algorithm,DEA)是一种对称加密算法,很可能是使用最广泛的密钥系统,特别是在保护金融数据的安全中,最初开发的DEA是嵌入硬件中的。通常,自动取款机(Automated Teller Machine,...
  • DES算法

    千次阅读 2019-09-25 07:50:36
    文章目录什么是DESDES的加密解密DES工作原理Feistel 网络的特定三重DES 什么是DES DES全称叫(Data Encryption Standard), 是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称加密算法DES之前一直使用很普遍...

    什么是DES

    DES全称叫(Data Encryption Standard), 是1977年美国联邦信息处理标准(FIPS)中所采用的一种对称加密算法。

    DES之前一直使用很普遍,但是随着计算机的进步,现在DES已经可以被暴力破解了,处理历史的原因外,我们不再建议使用DES算法。

    DES的加密解密

    DES的密钥长度是64比特,也就是8个字节。但是DES每隔7
    比特会设置一个错误校验位,所以真正的密钥长度是56比特。

    因为DES的长度是64比特,他每次只能将长度为64比特的原文进行加密,如果原文长于64比特的话,需要多次分组进行加密,这64比特的单位也叫做分组。

    分组密码(block cipher)就是以分组为单位进行加密的算法。

    其加密解密的示意图如下:

    DES加密

    明文64bits
    密文64bits
    密钥56bits
    DES加密

    DES解密

    密文64bits
    明文64bits
    密钥56bits
    DES解密

    DES工作原理

    DES是由Horst Feistel设计的,因此也称作Feistel网络。

    Feistel网络,加密的各个步骤称为轮(round),整个加密过程就是进行若干轮的循环。

    下图展示了DES中的一轮加密过程:

    左侧32bits
    XOR运算
    加密后的左侧32bits
    子密钥
    轮函数f
    右侧32bits
    复制
    右侧32bits

    由上图我们可以看到,在每一轮的操作中,输入的数据被分成左右两部分,中间的子密钥是指本轮加密所使用的密钥。在Feistel网络中,每一轮都使用不同的密钥,该密钥只是一个局部密钥,所以被称为子密钥。

    其运算步骤如下:

    1. 将输入的数据分成左右两部分
    2. 将输入的右边直接发送到输出的右边
    3. 将输入的右边发送到轮函数f
    4. 轮函数根据右侧数据和子密钥计算出一个随机数
    5. 将4得到的随机数和左侧数据进行XOR运算,将运算后的结果作为加密的左侧。

    我们可以看到这一轮操作,只加密了左侧数据,右侧的没有加密,然后我们可以交换左右两侧的数据,再来一轮加密。这样右侧的数据也被加密了。

    怎么解密

    上面我们讲到了加密的过程,接下来我们再看一下解密的过程。

    在一次性密码本中,我们讲到了XOR的特性,即:

    A XOR B = C
    C XOR B = A

    按照这样的特性,我们只需要将加密后的结果跟步骤4中计算出来的随机数再做一次XOR运算即可还原加密前的数据。

    如下图所示:

    左侧32bits
    XOR运算
    加密后的左侧32bits
    子密钥
    轮函数f
    右侧32bits
    复制
    右侧32bits
    加密后的左侧32bits
    XOR运算
    左侧32bits
    右侧32bits
    右侧32bits
    子密钥
    轮函数f
    复制

    Feistel 网络的特定

    我们可以看到Feistel网络有如下几个特定:

    1. Feistel网络的轮数可以任意增加。不论多少轮都可以正常解密。
    2. 解密与轮函数f无关,轮函数f也不需要有逆函数。轮函数可以设计得足够复制。
    3. 加密和解密可以使用完全相同的结构来实现。从上面我们讲到的可以看到,加密和解密其实是没有什么区别的。

    三重DES

    因为DES现在可以很容易被暴力破解,所以开发出了三重DES算法。

    三重DES就是将DES的算法重复三次得到的一种密码算法。其加密机制如下:

    DES加密
    DES解密
    DES加密
    密文
    明文
    DES密钥1
    DES密钥2
    DES密钥3

    由上图所示,3重DES的密钥长度是3*64bits。

    并且是 加密->解密->加密的过程。 在两个加密中加入了一个解密过程。

    这个是为了兼容普通的DES算法,如果将3个DES密钥保持一致,这样3重DES算法等于普通的DES算法了。

    更多精彩内容且看:

    更多教程请参考 flydean的博客

    展开全文
  • iOS中3DES加密算法原理

    千次阅读 2015-12-21 14:16:51
    DES是美国一种由来已久的加密标准,它的工作原理是将数据按照8个字节一段进行加密或解密,从而得到一段8个字节的密文或者明文。之后按照顺序将计算所得的数据连在一起即可。这里需要注意的是,由于DES加密解密时要求...

    要理解3DES,就必须先搞懂什么是DES。DES是美国一种由来已久的加密标准,它的工作原理是将数据按照8个字节一段进行加密或解密,从而得到一段8个字节的密文或者明文。之后按照顺序将计算所得的数据连在一起即可。这里需要注意的是,由于DES加密解密时要求数据长度必须为8个字节的倍数,因此当数据长度不足时必须先进行数据填充,这里使用的填充算法根据系统的不同可能会略有不同。


    DES算法有两种工作模式,ECB(电子密本方式)和CBC(密文分组链接方式),下面具体解释一下这两种工作模式的不同。


    DES ECB其实非常简单,就是将数据按照8个字节一段分别进行DES加密或解密(不足8个字节的按照需求先进行数据填充),最后按照顺序将加密或解密后的结果连在一起即可,各段数据之间互不影响。


    DES CBC稍微复杂一些,它在每一段加密或解密的过程中都要与前一段的结果做一次异或操作。同时CBC模式定义了一个特殊的8字节key(称为初始化向量),用以和第一段的结果做异或时用。这种机制使得加密的各段数据之间有了联系。


    加密步骤如下:

    1)首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据长度不是8字节的整数倍,先进行数据填充)

    2)第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1

    3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

    4)之后的数据以此类推,得到Cn

    5)按顺序连为C1C2C3......Cn即为加密结果。


    解密是加密的逆过程,步骤如下:

    1)首先将数据按照8个字节一组进行分组得到C1C2C3......Cn

    2)将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)

    3)将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2

    4)之后依此类推,得到Dn

    5)按顺序连为D1D2D3......Dn即为解密结果。

    这里注意一点,解密的结果并不一定是我们原来的加密数据,可能还含有你补得位,一定要把补位去掉才是你的原来的数据。


    OK,最后我们来说说3DES。3DES又称Triple DES,顾名思义就是三次DES算法。比起最初的DES,3DES更为安全。它是以DES为基本模块,通过组合分组方法设计出的分组加密算法。设Ek()和Dk()代表DES算法的加密和解密过程,k代表DES算法使用的密钥,P代表明文,C代表密文,则3DES加密解密的过程可表示为:


    C=Ek3(Dk2(Ek1(P)))

    P=Dk1(Ek2(Dk3(C)))


    这里可以k1=k3,但不能k1=k2=k3(如果相等的话就成了DES算法了)


    3DES with 2 diffrent keys(k1=k3),可以是3DES-CBC,也可以是3DES-ECB,3DES-CBC整个算法的流程和DES-CBC一样,但是在原来的加密或者解密处增加了异或运算的步骤,使用的密钥是16字节长度的密钥,将密钥分成左8字节和右8字节的两部分,即k1=k3=左8字节,k2=右8字节,然后进行加密运算和解密运算。


    3DES with 3 different keys,和3DES-CBC的流程完全一样,只是使用的密钥是24字节的,它将密钥分为3段8字节的密钥k1,k2,k3,在3DES加密时依次使用k1、k2、k3,在3DES解密时依次使用k3、k2、k1。

    展开全文
  • Base64和3DES加密算法原理

    千次阅读 2016-01-29 16:02:19
    这篇文章是对Base64和3DES算法以及他们如何在iphone平台上实现的一点总结。本文吸收了很多前人的资料和成果,在修正了其中的一些错误的基础上添加了自己的理解。在此向前人出色的工作表示感谢。本文主要参考资料如下...

    这篇文章是对Base64和3DES算法以及他们如何在iphone平台上实现的一点总结。本文吸收了很多前人的资料和成果,在修正了其中的一些错误的基础上添加了自己的理解。在此向前人出色的工作表示感谢。本文主要参考资料如下:
    http://blog.csdn.net/ishow99/archive/2010/07/02/5709274.aspx
    http://topic.csdn.net/u/20100113/09/6498a3ca-5e0a-4e1e-92df-03b7b2a24ab4.html
    http://baike.baidu.com/view/469071.htm
    http://hi.baidu.com/pj19830204/blog/item/96464d2462d32e3fc9955912.html
    http://baike.baidu.com/view/350958.htm
    http://www.cocoachina.com/bbs/simple/?t47498.html
    Base64加密算法
    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。它的优点是算法效率高,编码出来的结果比较简短,同时也具有不可读性。

    Base64要求把每三个8Bit的字节按照每6Bit一组的长度分割成四组(3*8 = 4*6 = 24),然后给每组6Bit的数据添加两位高位0,组成四个新的8Bit的字节。也就是说,转换后的字符串理论上将要比原来的长1/3。然后将新产生的四个8Bit字节根据转换表映射为ASCII字符,转换表如下所示(最后两个字符的定义在不同的系统中有所不同):

    索引 对应字符 索引 对应字符 索引 对应字符 索引 对应字符
    0 A 16 Q 32 g 48 w
    1 B 17 R 33 h 49 x
    2 C 18 S 34 i 50 y
    3 D 19 T 35 j 51 z
    4 E 20 U 36 k 52 0
    5 F 21 V 37 l 53 1
    6 G 22 W 38 m 54 2
    7 H 23 X 39 n 55 3
    8 I 24 Y 40 o 56 4
    9 J 25 Z 41 p 57 5
    10 K 26 a 42 q 58 6
    11 L 27 b 43 r 59 7
    12 M 28 c 44 s 60 8
    13 N 29 d 45 t 61 9
    14 O 30 e 46 u 62 +
    15 P 31 f 47 v 63 /

    那么如果原文的字节数不是3的倍数,即转换到最后部分时bit数不够6的倍数该怎么办呢?我们规定,当遇到这种情况,不足的bit位使用全0来补足,转换后需要在密文的末尾添加=号来标注。如果原文剩余1字节(即需要补足4位0),那么就在密文末尾添加两个=号,如果原文剩余2字节(即需要补足2位0),则添加一个=号,这就是为什么有些编码后的结果会以=号结束的原因。

    下面举一个例子
    编码“Man”
    「M」的ASCII碼 = 77 = 01001101
    「a」的 = 97 = 01100001
    「n」的 = 110 = 01101110

    将这三个字节拼合,得出一个24位的资料:
    010011010110000101101110

    现在六个一组的分开并补高位0,得到4个新的字节为:
    00010011 00010110 00000101 00101110

    对应的十进制值为:

    19 22 5 46

    对应的ASCII字符为

    T W F u

    所以“Man”经过Base64加密后的结果为“TWFu”。

    解码同理,把 TWFu的二进制位分割,去掉高位0,重组后得到三个8位值,最后得出原码。

    下面是一个原码字节数不是三的倍数的例子:

    加密“M”

    「M」的ASCII碼 = 77 = 01001101

    位数不够6的倍数,补0后变为

    010011010000

    六个一组分开是

    010011 010000,结果是TQ

    在密文末尾加两个“=”,结果就是“TQ==”。

    3DES加密算法

    要理解3DES,就必须先搞懂什么是DES。DES是美国一种由来已久的加密标准,它的工作原理是将数据按照8个字节一段进行加密或解密,从而得到一段8个字节的密文或者明文。之后按照顺序将计算所得的数据连在一起即可。这里需要注意的是,由于DES加密解密时要求数据长度必须为8个字节的倍数,因此当数据长度不足时必须先进行数据填充,这里使用的填充算法根据系统的不同可能会略有不同。

    DES算法有两种工作模式,ECB(电子密本方式)和CBC(密文分组链接方式),下面具体解释一下这两种工作模式的不同。

    DES ECB其实非常简单,就是将数据按照8个字节一段分别进行DES加密或解密(不足8个字节的按照需求先进行数据填充),最后按照顺序将加密或解密后的结果连在一起即可,各段数据之间互不影响。

    DES CBC稍微复杂一些,它在每一段加密或解密的过程中都要与前一段的结果做一次异或操作。同时CBC模式定义了一个特殊的8字节key(称为初始化向量),用以和第一段的结果做异或时用。这种机制使得加密的各段数据之间有了联系。

    加密步骤如下:

    1)首先将数据按照8个字节一组进行分组得到D1D2……Dn(若数据长度不是8字节的整数倍,先进行数据填充)

    2)第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1

    3)第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2

    4)之后的数据以此类推,得到Cn

    5)按顺序连为C1C2C3……Cn即为加密结果。

    解密是加密的逆过程,步骤如下:

    1)首先将数据按照8个字节一组进行分组得到C1C2C3……Cn

    2)将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)

    3)将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2

    4)之后依此类推,得到Dn

    5)按顺序连为D1D2D3……Dn即为解密结果。

    这里注意一点,解密的结果并不一定是我们原来的加密数据,可能还含有你补得位,一定要把补位去掉才是你的原来的数据。

    OK,最后我们来说说3DES。3DES又称Triple DES,顾名思义就是三次DES算法。比起最初的DES,3DES更为安全。它是以DES为基本模块,通过组合分组方法设计出的分组加密算法。设Ek()和Dk()代表DES算法的加密和解密过程,k代表DES算法使用的密钥,P代表明文,C代表密文,则3DES加密解密的过程可表示为:

    C=Ek3(Dk2(Ek1(P)))

    P=Dk1(Ek2(Dk3(C)))

    这里可以k1=k3,但不能k1=k2=k3(如果相等的话就成了DES算法了)

    3DES with 2 diffrent keys(k1=k3),可以是3DES-CBC,也可以是3DES-ECB,3DES-CBC整个算法的流程和DES-CBC一样,但是在原来的加密或者解密处增加了异或运算的步骤,使用的密钥是16字节长度的密钥,将密钥分成左8字节和右8字节的两部分,即k1=k3=左8字节,k2=右8字节,然后进行加密运算和解密运算。

    3DES with 3 different keys,和3DES-CBC的流程完全一样,只是使用的密钥是24字节的,它将密钥分为3段8字节的密钥k1,k2,k3,在3DES加密时依次使用k1、k2、k3,在3DES解密时依次使用k3、k2、k1。

    展开全文
  • 代换-置换网络SPN 的工作 原理及示例 Feistel结构和DES算法 AES 算法 迭代密码 迭代密码的核心是一个密钥编排方案和一 个轮函数 密钥编排方案对密钥k进行变换生成Nr个 1 2 Nr 子密钥(也叫轮密钥) 记为k ,k ,k i 轮...
  • DES算法原理 1.所需参数 key:8个字节共64位的工作密钥 data:8个字节共64位的需要被加密或被解密的数据 mode:DES工作方式,加密或者解密 2.原理图示 DES算法使用64位的密钥key,将64位的明文输入块,变为64...
  • Base64和3DES算法

    2017-11-28 10:49:00
    Base64加密算法Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下...DES是美国一种由来已久的加密标准,它的工作原理是将数据按照8个字节一段进行加密或解密,从而得到一段8个字节的密...
  • DES加密算法

    千次阅读 2009-03-07 23:36:00
    DES加密算法 DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密钥长度为56位,明文按64位进行...DES工作的基本原理是,其入口参数有三个:key、data
  • 1. 掌握DES算法工作原理; 2. 熟悉分组加密算法的工作模式。 DES算法,电码本模式(ECB)、密码分组链接模式(CBC),并输出其每一轮的加密结果并显示在屏幕上。
  • des和3Des加密算法实现

    2011-04-24 15:57:53
    DES简介:  DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密钥长度为56位,明文按...DES工作的基本原理是,其入口参数有三个:key、data...
  • 本文是基于密码编码学与网络安全(第... 准备篇 这篇博客对DES算法原理进行了系统的讲述: https://blog.csdn.net/qq_27570955/article/details/52442092 小结 有了前面的准备工作,建立起自己对算法的流程框架: ...
  • Java实现DES加密解密算法

    千次阅读 2017-06-06 16:08:30
    DES算法全称为Data Encryption Standard,即数据加密算法,它是IBM公司于1975年研究成功并公开发表的。 DES算法入口参数有三个: ...DES算法原理: 如Mode为加密,则用Key 去把数据Data进行加密, 生成D
  • DES加密算法的硬件实现,王厚荣,,本文通过对DES算法的简单介绍,了解其基本的工作原理,利用硬件描述语言(Verilog HDL)和Xilinx的ISE Navigator 仿真平台来实现。DES加密算��
  • GO的DES/3DES加密算法的实现及通信透彻解析前位语:前景提要:一、DES介绍MODE: ECBMODE: CBC使用方法DES二、3DES加密原理使用方法3DES注意点:三、多语言通信 前位语: 各位老铁万福金安,相信各位之所以找到这篇文章,...
  • DES加密算法

    2011-05-09 10:12:29
    编辑本段基本原理 入口参数有三个:key、data、mode。 key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为...
  • 实验三 编程实现DES工作模式

    千次阅读 2020-08-25 23:30:57
    掌握DES算法工作原理; 熟悉分组加密算法的工作模式。 【实验原理】 1.DES的基本原理 其入口参数有三个:key、data、mode。Key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时...
  • DES算法的入口参数有三个:Key、Data、Mode。 key为加密解密使用的密钥 data为加密解密的数据 mode为其工作模式 明文按照64位进行分组,形成明文组。 利用一个56位+8个奇偶校验位(第8, 16, 24, 32, 40, 48, 56...
  • DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的...
  • python实现DES加密算法(超级详细)

    千次阅读 2020-05-25 17:58:39
    原理搞懂之后接下来先做一些准备工作,先创建如下文件(理由后面提到)miwen.txt是我最后用来存生成的密文的,可以不建: 每个文件的内容分别如下: E_extend.txt 32,1,2,3,4,5, 4,5,6,7,8,9, 8,9,10,11,12,13, 12,...
  • DES算法是这样工作的:如Mode為加密,则用Key 去把数据Data进行加密, 生成Data的密码形式(64位)作為DES的输出结果;如Mode為解密,则用Key去把密码形式的数据Data解密,还原為Data的明码形式(64位)作為DES的...
  • SSL工作原理

    2018-03-27 11:42:56
    SSL工作原理 SSL 是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议(HTTP)使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算法(如 DES 或 ...
  • https工作原理

    2018-03-05 15:36:58
    加密算法简介正文开始...对称加密使用简单,密钥较短,加密和解密过程较快,耗时短,常见的对称加密算法DES,3DES,lDEA,AES,RC4等。非对称加密与对称加密不同,其加密算法需要两个密钥:公开密钥(publickey...
  • ssl工作原理

    2010-05-27 13:37:00
    SSL工作原理SSL 是一个安全协议,它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议 (HTTP)使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算法(如 DES 或 ...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 147
精华内容 58
关键字:

des算法工作原理