精华内容
下载资源
问答
  • DES算法基本原理

    千次阅读 2019-02-22 00:42:57
    DES算法基本原理 DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准。 DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。 密钥长64位,密钥事实上是56位参与...

    DES算法基本原理

     

    DES算法为密码体制中的对称密码体制,又被称为美国数据加密标准。

    DES是一个分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。

    密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的密钥按位替代或交换的方法形成密文组。

     

    步骤:

    IP置换
      IP置换目的是将输入的64位数据块按位重新组合,并把输出分为L0、R0两部分,每部分各长32位。

    密钥置换
      不考虑每个字节的第8位,DES的密钥由64位减至56位,每个字节的第8位作为奇偶校验位。产生的56位密钥由规则表生成;

          在DES的每一轮中,从56位密钥产生出不同的48位子密钥,确定这些子密钥的方式如下:
      1).将56位的密钥分成两部分,每部分28位。
      2).根据轮数,这两部分分别循环左移1位或2位。每轮移动的位数按规则表;

          移动后,从56位中选出48位。这个过程中,既置换了每位的顺序,又选择了子密钥,因此称为压缩置换。压缩置换规则按规则表;

    扩展置换
      扩展置换目标是IP置换后获得的右半部分R0,将32位输入扩展为48位(分为4位×8组)输出。

    S盒代替
      压缩后的密钥与扩展分组异或以后得到48位的数据,将这个数据送人S盒,进行替代运算。替代由8个不同的S盒完成,每个S盒有6位输入4位输出。48位输入分为8个6位的分组,一个分组对应一个S盒,对应的S盒对各组进行代替操作。

    P盒置换
      S盒代替运算的32位输出按照P盒进行置换。该置换把输入的每位映射到输出位,任何一位不能被映射两次,也不能被略去,映射规则按规则表;

    IP-1末置换
      末置换是初始置换的逆过程,DES最后一轮后,左、右两半部分并未进行交换,而是两部分合并形成一个分组做为末置换的输入。

    经过以上步骤,就可以得到密文了。
     

    展开全文
  • DES加密基本原理

    2018-04-12 13:56:26
    本文旨在讲诉最基本DES入门算法原理. 1. 变量及函数的定义 变量/函数名 类 型 说 明 encryption(String plain, String orginKey) String   ...

    本文旨在讲诉最基本的DES入门算法原理.

    1. 变量及函数的定义

    变量/函数名

    类 型

    说        明

    encryption(String plain, String orginKey)

    String

     

    DES的字符串加密,plain为明文,orginKey为8位密钥字符串

    decryption(String cipher, String orginKey)

    String

    DES的字符串解密,cipher为密文,originkey为8位密钥字符串

    fun(BitSet R, BitSet k)

    BitSet

    轮结构的f函数, 32位的数据R,48位的子密钥k,返回最后经过P置换的32位输出

    createKeys(BitSet orginKey)

    Void

    根据64位密钥生成16轮子密钥subKeys16[]。orginKey为64bit位的密钥

    left_shift(BitSet k, int shift)

    BitSet

    密钥产生过程的C、D的循环左移,shift为左移位数

    checkLength(String checked)

    String

    检查字符串是否是8的整数倍,返回由0填充的整数倍字符串

    stringToBitSet(String str)

    BitSet

    字符串str转为64位的bitset类型,用于加、解密中两者的转化

    BitSetToString(BitSet bt)

    String

    返回Bitset对应的字符串,用于加、解密中两者的转化

    subKeys16

    BitSet[]

    16轮子密钥

    count

    Int

    补零个数

    S_BOX

    int[][][]

    S盒

    desTxtDecryption(String cipherTxt, String key, String plainTxt)

    Void

    对文本文档cipherTxt进行解密,将结果写入plainTxt中,plainTxt为明文文本文档文件路径,cipherTxt 密文文档文件路径,key 加密密钥

    desTxtEncryption(String plainTxt, String key, String cipherTxt)

    Void

    对文本文档plainTxt进行加密,将结果写入cipherTxt中,plainTxt为明文文本文档文件路径,cipherTxt 密文文档文件路径,key 加密密钥

     

    2. 算法流程图

    des
    des算法流程图

    3.代码

    github:https://github.com/cantfu/cryptography/tree/master/des

    展开全文
  • DES原理及python实现

    2020-12-22 07:29:26
    DES是一种对称加密算法【即发送者与接收者持有相同的密钥】,它的基本原理是将要加密的数据划分为n个64位的块,然后使用一个56位的密钥逐个加密每一个64位的块,得到n个64位的密文块,最后将密文块拼接起来得到最终...
  • DES原理

    千次阅读 2015-06-10 17:29:04
     DES的原始思想可以参照二战德国的恩格玛机,其基本思想大致相同。传统的密码加密都是由古代的循环移位思想而来,恩格玛机在这个基础之上进行了扩散模糊。但是本质原理都是一样的。现代DES在二进制级别做着同样的事...
    数据加密标准DES 
     DES的原始思想可以参照二战德国的恩格玛机,其基本思想大致相同。传统的密码加密都是由古代的循环移位思想而来,恩格玛机在这个基础之上进行了扩散模糊。但是本质原理都是一样的。现代DES在二进制级别做着同样的事:替代模糊,增加分析的难度。

    加密原理  DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。

    三重 DES  DES 的常见变体是三重 DES,使用 168 位的密钥对资料进行三次加密的一种机制;它通常(但非始终)提供极其强大的安全性。如果三个 56 位的子元素都相同,则三重 DES 向后兼容 DES。破解方法  攻击 DES 的主要形式被称为蛮力的或彻底密钥搜索,即重复尝试各种密钥直到有一个符合为止。如果 DES 使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。随着计算机系统能力的不断发展,DES 的安全性比它刚出现时会弱得多,然而从非关键性质的实际出发,仍可以认为它是足够的。不过 ,DES 现在仅用于旧系统的鉴定,而更多地选择新的加密标准 — 高级加密标准(Advanced Encryption Standard,AES)。  新的分析方法有差分分析法和线性分析法两种

    DES算法的安全性  一.安全性比较高的一种算法,目前只有一种方法可以破解该算法,那就是穷举法.  二.采用64位密钥技术,实际只有56位有效,8位用来校验的.譬如,有这样的一台PC机器,它能每秒计算一百万次,那么256位空间它要穷举的时间为2285年.所以这种算法还是比较安全的一种算法.  TripleDES。该算法被用来解决使用 DES 技术的 56 位时密钥日益减弱的强度,其方法是:使用两个独立密钥对明文运行 DES 算法三次,从而得到 112 位有效密钥强度。TripleDES 有时称为 DESede(表示加密、解密和加密这三个阶段)。





    算法原理:

    置换规则表

    其功能是把输入的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,

    即将输入的第58位换到第一位,第50位换到第2位,...,依此类推,最后一位是原来的第7位。L0、R0则是换位输出后的两部分,L0是输出的左32位,R0 是右32位,例:设置换前的输入值为D1D2D3......D64,则经过初始置换后的结果为:L0=D58D50...D8;R0=D57D49...D7。

    经过16次迭代运算后。得到L16、R16,将此作为输入,进行逆置换,即得到密文输出。逆置换正好是初始置换的逆运算。例如,第1位经过初始置换后,处于第40位,而通过逆置换,又将第40位换回到第1位,
    逆置换规则如下表所示:
    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,

    子密钥生成分为三步走:
    第一步,先把密钥中的奇偶校验为去掉,然后根据选择置换PC-1讲剩下的密钥分成两块C0和D0;
    第二步,将C0和D0进行循环左移变换,变换后生成C1和D1,然后C1和D1合并,通过选择置换PC-2生成子密钥K1;
    第三步,C1和D1再次经过循环左移变换,生成C2和D2,C2和D2合并,通过选择置换PC-2生成子密钥K2;
    第四步,以此类推,需要注意其中循环左移的位数,一共是循环左移十六次,其中LS1(第一次),LS2(第二次),LS9,LS16是循环左移一位,其他的都是左移两位。




    加密函数
    加密函数的加密过程也可以通过三步走:
    第一步,将R0通过位选择函数E置换,其实这是一个扩充的置换,因为R0本身是32位的(这点先记住就行了,后一篇文章会说),而生成的子密钥是48位的,因此需要扩充一下,方能按位运算。
    第二步,将扩充完的R0和子密钥K1进行模2加运算,得到48位的一个串,把这个串从左到右分为8组,每组6个字符。这里设8组分别为B1,B2,B3,B4,B5,B6,B7,B8。其中Bj=b1b2b3b4b5b6。
    第三步,通过S盒来收缩,把每组中的b1b6放一块,换算为十进制,b2b3b4b5放一块,也换算为十进制。b1b6代表S盒中的行标,b2b3b4b5代表列标。比如说B1=011111,那么b1b6就等于十进制的1,b2b3b4b5等于十进制的15,也就是对应表中的S1块中的第1行(注意不是0行),15列,也就是8,然后把8变为二进制1000。这就完成了S盒收缩变换,然后通过S盒输出的就是32位的一个串。
    第四步,把32位的串经过置换函数P的置换得到的结果就是这个核心函数的产物了。

    放大换位表

    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,

    功能表(S盒)

    其功能是把48bit数据变为32bit数据。

    S1:
    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,


    S2:
    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,

    S3:
    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,

    S4:
    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,

    S5:
    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,

    S6:
    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,

    S7:
    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,

    S8:
    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,

    经过P变换后输出的比特串才是32比特的f (Ri-1,Ki)。

    单纯换位表(P盒置换表)

    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,


    经过16次变换后,然后使用
    逆置换规则如下表所示:
    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算法的解密过程是一样的,区别仅仅在于第一次迭代时用子密钥K15,第二次K14、......,最后一次用K0,算法本身并没有任何变化。


    展开全文
  • DES加解密原理

    2020-08-22 17:43:05
    DES算法的基本步骤: *1 初始置换IP *2 16轮迭代处理 *3 互换左、右32位 *4 初始逆置换IP-1 1、初始置换IP 初始置换IP是将64b的明文进行位置重排,通过IP运算得到一个乱序的64b明文组,置换后的数据平均分为左右两段...

    一、DES的加密

    DES算法是典型的分组密码,加密前先将明文编码表示后的二进制序列划分成长度为64b的分组,DES算法的密钥也是长度为64b的二进制序列,密钥中第8、16、24、32、40、48、56、64位为奇偶校验位。
    DES算法的基本步骤:
    *1 初始置换IP
    *2 16轮迭代处理
    *3 互换左、右32位
    *4 初始逆置换IP-1

    1、初始置换IP

    初始置换IP是将64b的明文进行位置重排,通过IP运算得到一个乱序的64b明文组,置换后的数据平均分为左右两段,用L和R来表示,这两部分数据是下一代迭代变换的初始输入。

    2、迭代变换

    每轮迭代只对右边的32b进行一系列加密变换F,加密变换包括选择运算E、密钥加密运算、选择压缩运算S,置换运算P,在一轮迭代即将结束时,把上一轮左边32b与本轮经加密变换F得到的32b进行模二相加,作为下一轮迭代时右边的段,并将上一轮右边的未经变换的段直接送到左边寄存器中作为下一轮迭代时左边的段。
    16轮迭代结束后,再将所得的左、右长度相等的L16和R16进行交换得到64b数据。

    (1)选择扩展运算E

    将输入的32b拓展成48b输出,扩展方法是重复某些位置上的元素,共有16个位置上的元素被读了两次

    (2)密钥加密运算

    将子密钥产生器输出的子密钥K与选择扩展运算E输出的48b数据按位模二相加

    (3)选择压缩运算S

    48比特自左至右分成八组,每组6b,然后送入8个S盒。每个S盒能够将6b的输入转化为4b的输出(将输入的第一位和第六位组成的二进制数值作为横坐标,其它4b是纵坐标,查询S盒表得到最终数值),最后得到的十进制数均用二进制表示

    (4)置换运算

    对8个盒子中的数据进行坐标变换

    3、子密钥产生器

    DES加密过程共涉及16轮迭代,每轮使用一个不同的48位子密钥,共需16个子密钥,这些子密钥由初始输入的64位密钥产生,初始密钥中有8位奇偶校验位。通过16轮置换选择和每轮左移位数加一得到16个子密钥

    4、逆初始置换

    利用逆初始置换表得到最后的密文。

    二、DES算法解密

    密钥与加密的密钥相同,只是子密钥的使用次序相反,得出最后的64b的明文

    三、DES加解密算法代码

    #初始置换表
    #逆初始置换表
    #选择扩展运算表
    #8个S盒表
    #置换选择PC-1表
    #置换选择PC-2表
    #移位次数表
    #置换
    def table(data,table1)
        test = []    
        for i in range(0, len(table1)):
               test.append(data[table1[i] - 1])    
     return test 
     #循环左移
     def cyclicLeft(temp, num):    
         test = []    
         for i in range(0, len(temp)):        
               test.append(temp[(i + num) % len(temp)])     
         return test
     #异或运算
     def myXOR(L, R):    
         test = []    
         for i in range(0, len(L)):       
               test.append(L[i] ^ R[i])    
         return test
     #将temp分为左半部分
     def lUniform(temp):    
         test = temp[0:len(temp) // 2]    
         return test 
     #将temp分为右半部分
     #合并
    def merge(L, R):    
        test = []    
        for i in range(0, len(L)):        
            test.append(L[i])    
        for i in range(0, len(L)):        
            test.append(R[i])    
        return test
     #生成子密钥
     #S盒
     #DES加密
     def des(text, key):    
         text1 = table(text, IP)   
         K = myDESSubKey(key)    
         L0 = text1[0:32]    
         R0 = text1[32:64]    
         for i in range(0, 16):       
             L1 = R0        
             R1 = myXOR(L0, myF(R0, K[i]))       
             L0 = L1        
             R0 = R1    
          temp = merge(R1, L1)   
          C = table(temp, IP_1)   
          return C
    #DES解密
     #将输入的字符串转化为bit数组
     def str2bitarray(s):   
          ret = bitarray(''.join([bin(int('1' + hex(c)[2:], 16))[3:] for c in s.encode('utf-8')]))   
         return ret  
     def bitarray2str(bit):    
         return bit.tobytes().decode('utf-16') 
     #进入主函数
      输入八位明文
      输入八位密钥
    

    点击进入算法借鉴的原文链接

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

    2018-05-31 09:23:32
    DES的每个分组是64位,既明文和密钥都是64位(密钥实际...DES的流程基本是执行16轮下面的运算:1 初始变换Initial Permutation2 右边32位f函数2.1 E置换2.2 与轮密钥XOR2.3 S盒替换2.4 P置换2.5 和左边32位XOR3 左右...
  • 3DES加密算法原理

    2021-04-07 17:31:52
    因此,3DES加密算法并非什么新的加密算法,是DES的一个更安全的变形,它以DES基本模块,通过组合分组方法设计出分组加密算法。。 3DESDES向AES过渡的加密算法,它使用2个或者3个56位的密钥对
  • DES基本结构为Feistel网络。(一)Feistel网络的加密过程在Feistel网络中,加密的各个步骤,称为轮round,整个加密过程就是经过若干次轮的循环。下图是Feistel网络一轮的运行过程。用文字描述一轮:1. 将输入的...
  •   1、本文中DES加解密基本流程及S盒等参数参照自杨波《现代密码学(第四版)》,实现过程均为自编函数。   2、为了说明64bit密钥中,只有56bit真正参与加解密过程,对网上代码中的密钥生成过程做出了修改,详见...
  • 要使用des算法,那就要先了解des算法。(以下是des算法介绍,来自百度百科) DES算法是什么 ... 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、...DES基本原理 其入口参数有三个:key、data、mo
  • 加密技术基本原理

    千次阅读 2014-06-25 15:22:10
    如果加密和解密使用的密钥是相同的,就成为对称密钥,流行的对称密钥加密算法为:DES、Triple-DES,RC2和RC4 对于对称密钥技术,暴力破解的方法就是尝试几乎所有可能,所有密钥位数越多,破解难度越大,目前普遍认为
  • 网络 - HTTPS 基本原理

    2020-10-17 09:30:38
    开局一张图 ...SSL/TLS又是什么? SSL的全称是Secure Sockets Layer,即安全套接层协议,是为网络通信提供安全及数据完整性的一种安全协议。...SSL/TLS = 非对称加密(如RSA、ECC) + 对称加密(如AES、DES
  • https的实现基本原理

    2010-08-15 18:23:42
    有两种基本的加解密算法类型:1)对称加密 :密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;2)非对称加密 :密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知...
  • DES

    千次阅读 2009-08-19 22:50:00
    DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密钥长度为56位(实际上密钥为64位而DES只用到其中56位),...DES工作的基本原理是,其入口参数有三
  • JAVA DES

    2013-01-31 16:43:27
    DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准 ,是1972年美国IBM 公司研制的对称密码体制加密算法。其密钥长度为56位,明文按64位...DES工作的基本原理是,其入口参数有三个:key、data、mode。 ke
  • 初识DES

    2019-03-12 12:34:53
    DES DES简介 DES全称为Data ...DES加密原理 基本思想 将二进制序列的明文分成每64bit一组,用长为64bit的密钥对其进行16轮代换和置换加密,最后形成密文。 过程总览 具体可分为如下几个部分: 初始...
  • 基于key的加密算法又分为两类,对称加密和不对称加密,比如DES,AES那种的,通信双方一方用key加密之后,另一方用相同的key进行反向的运算就可以解密。不对称加密比较著名的就是RSA,加密的时候有一...
  • des和3Des加密算法实现

    2011-04-24 15:57:53
    DES简介:  DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密钥长度为56位,明文按...DES工作的基本原理是,其入口参数有三个:key、data...
  •  Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24 位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0...
  • 实验目的:了解DES算法基本工作原理,体会并理解分组密码算法的混淆和扩散概念。了解Sbox工作原理及效果。了解DES的工作模式和填充方式。了解差分攻击的基本原理
  • DES加密算法编程实现

    万次阅读 2017-03-31 21:46:15
    课程上比较好玩的实验,分享出来给大家一起学习~DES加密算法编程实现华南理工大学 软件学院 陈春华 (博士) 实验目的 通过使用DES 算法对实验数据进行加密和解密,掌握现代分组密码算法基本原理,熟练掌握DES 算法各...
  • DES加密算法

    千次阅读 2009-03-07 23:36:00
    DES加密算法 DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准,是1972年美国IBM公司研制的对称密码体制加密算法。其密钥长度为56位,明文按64位进行...DES工作的基本原理是,其入口参数有三个:key、data
  • JAVA实现DES加密

    2015-06-16 15:55:34
    DES算法为密码体制中的对称密码体制,又被成为美国数据加密标准 ,是1972年美国IBM 公司研制的对称密码体制加密算法。其密钥长度为56位,...DES工作的基本原理是,其入口参数有三个:key、data、mode。 key为加...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 182
精华内容 72
关键字:

des基本原理