教育信息化

您的当前位置:网站首页 > 教育信息化

兄弟连区块链教程区块链背后的信息安全2DES、3DES加密算法原理一

发布时间:[2019-06-12]       返回列表

  (在可选中可以下载)更新内容:·对话修正·界面修正·非官方补丁同步更新·书籍修正·对话修正·地名修正统一·非官方补丁同步更新。·对部分反馈的书籍错误内容进行修正。·对话修正·非官方补丁同步更新。·感谢由ShaquilleWang的反馈的并将提供的错误内容都进行修正。

  由于哲学每年都会出到一个大的分析题,因此应该引起重视。记忆方式推荐采用思维导图、记忆树方法!  2.政治经济学,着重掌握具体知识  就政治经济学来说,应该注重具体知识的掌握。从2010年考研真题来看,政治经济学的内容大大删减,以选择题为主,不像以前那样会涉及到分析题了。

兄弟连区块链教程区块链背后的信息安全2DES、3DES加密算法原理一

  区块链背后的信息安全2DES、3DES加密算法原理一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。

但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 #DES、3DES加密算法原理及其GO语言实现DES加密算法,为对称加密算法中的一种。 70年代初由IBM研发,后1977年被美国国家标准局采纳为数据加密标准,即DES全称的由来:DataEncryptionStandard。

对称加密算法,是相对于非对称加密算法而言的。

两者区别在于,对称加密在加密和解密时使用同一密钥,而非对称加密在加密和解密时使用不同的密钥,即公钥和私钥。 常见的DES、3DES、AES均为对称加密算法,而RSA、椭圆曲线加密算法,均为非对称加密算法。

DES是以64比特的明文为一个单位来进行加密的,超过64比特的数据,要求按固定的64比特的大小分组,分组有很多模式,后续单独总结,暂时先介绍DES加密算法。

DES使用的密钥长度为64比特,但由于每隔7个比特设置一个奇偶校验位,因此其密钥长度实际为56比特。 奇偶校验为最简单的错误检测码,即根据一组二进制代码中1的个数是奇数或偶数来检测错误。 ##Feistel网络DES的基本结构,由IBM公司的HorstFeistel设计,因此称Feistel网络。

在Feistel网络中,加密的每个步骤称为轮,经过初始置换后的64位明文,进行了16轮Feistel轮的加密过程,最后经过终结置换后形成最终的64位密文。 64比特明文被分为左、右两部分处理,右侧数据和子密钥经过轮函数f生成用于加密左侧数据的比特序列,与左侧数据异或运算,运算结果输出为加密后的左侧,右侧数据则直接输出为右侧。 其中子密钥为本轮加密使用的密钥,每次Feistel均使用不同的子密钥。 子密钥的计算,以及轮函数的细节,稍后下文介绍。

由于一次Feistel轮并不会加密右侧,因此需要将上一轮输出后的左右两侧对调后,重复Feistel轮的过程,DES算法共计进行16次Feistel轮,最后一轮输出后左右两侧无需对调。 DES加密和解密的过程一致,均使用Feistel网络实现,区别仅在于解密时,密文作为输入,并逆序使用子密钥。 go标准库中DES算法实现如下:```gofunccryptBlock(subkeys[]uint64,dst,src[]byte,decryptbool){b:=(src)//初始置换b=permuteInitialBlock(b)left,right:=uint32(b32),uint32(b)varsubkeyuint64//共计16次feistel轮fori:=0;i16;i++{//加密和解密使用子密钥顺序相反ifdecrypt{subkey=subkeys[15-i]}else{subkey=subkeys}//feistel轮函数left,right=right,left^feistel(right,subkey)}//最后一轮无需对调preOutput:=(uint64(right)32)|uint64(left)//终结置换(dst,permuteFinalBlock(preOutput))}//代码位置src/crypto/des/```##初始置换和终结置换进入Feistel轮之前,64位明文需做一次初始置换。

Feistel轮结束后,需做一次反向操作,即终结置换。

初始置换和终结置换目的是为加强硬件的破解难度而加的。

附go标准库中使用的初始置换表和终结置换表如下:```go//初始置换表varinitialPermutation=[64]byte{6,14,22,30,38,46,54,62,4,12,20,28,36,44,52,60,2,10,18,26,34,42,50,58,0,8,16,24,32,40,48,56,7,15,23,31,39,47,55,63,5,13,21,29,37,45,53,61,3,11,19,27,35,43,51,59,1,9,17,25,33,41,49,57,}//终结置换表varfinalPermutation=[64]byte{24,56,16,48,8,40,0,32,25,57,17,49,9,41,1,33,26,58,18,50,10,42,2,34,27,59,19,51,11,43,3,35,28,60,20,52,12,44,4,36,29,61,21,53,13,45,5,37,30,62,22,54,14,46,6,38,31,63,23,55,15,47,7,39,}//代码位置src/crypto/des/```##子密钥的计算DES初始密钥为64位,其中8位用于奇偶校验,实际密钥为56位,64位初始密钥经过PC-1密钥置换后,生成56位串。

经PC-1置换后56位的串,分为左右两部分,各28位,分别左移1位,形成C0和D0,C0和D0合并成56位,经PC-2置换后生成48位子密钥K0。 C0和D0分别左移1位,形成C1和D1,C1和D1合并成56位,经PC-2置换后生成子密钥K1。 以此类推,直至生成子密钥K15。

但注意每轮循环左移的位数,有如下规定:```govarksRotations=[16]uint8{1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1}//代码位置src/crypto/des/```go标准库中DES子密钥计算的代码如下:```gofunc(c*desCipher)generateSubkeys(keyBytes[]byte){key:=(keyBytes)//PC-1密钥置换,生成56位串permutedKey:=permuteBlock(key,permutedChoice1[:])//56位串分左右两部分,各28位,ksRotate为依次循环左移1位leftRotations:=ksRotate(uint32(permutedKey28))rightRotations:=ksRotate(uint32(permutedKey4)4)//生成子密钥fori:=0;i16;i++{//合并左右两部分,之后PC-2置换pc2Input:=uint64(leftRotations)28|uint64(rightRotations)=permuteBlock(pc2Input,permutedChoice2[:])}}//代码位置src/crypto/des/```附go标准库中使用的PC-1置换表和PC-2置换表:```go//PC-1置换表varpermutedChoice1=[56]byte{7,15,23,31,39,47,55,63,6,14,22,30,38,46,54,62,5,13,21,29,37,45,53,61,4,12,20,28,1,9,17,25,33,41,49,57,2,10,18,26,34,42,50,58,3,11,19,27,35,43,51,59,36,44,52,60,}//PC-2置换表varpermutedChoice2=[48]byte{42,39,45,32,55,51,53,28,41,50,35,46,33,37,44,52,30,48,40,49,29,36,43,54,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24,}//代码位置src/crypto/des/```未完待续感谢关注分享!。

下一篇:没有了
友情链接 网站地图
地址:西安大明宫遗址公园太元路