公司新闻

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

    2、负责整理项目日报、周报、月报并上报相关部门及总经理。  3、每周、每月的项目销售分析报告,每月工作述职报告。  4、协助项目经理完成对置业顾问的绩效和晋升考核工作。

  虽然作者的初衷只为了私人间交流和给后代留个纪念,但它丰富的内容,简洁流畅的文笔,蕴含的人生体验和哲理,已远远超出‘病后杂感’的框架,不仅对老人、病人,而且对所有追求人生美、人性美的人均具有很高的鉴赏价值和启迪意义。    周嫦的篇篇文章所以打动人,贵在真情流露。

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

  区块链背后的信息安全2DES、3DES加密算法原理二。 ##Feistel轮函数每次Feistel轮函数内部,均经过4种运算,即:*1、扩展置换:右侧32位做扩展置换,扩展置换将32位输入扩展成为48位输出,使得扩展后输出数据长度与48位子密钥等长。

*2、异或运算:右侧32位扩展置换为48位后,与48位子密钥做异或运算。

*3、S盒置换:将异或运算后的48位结果,分成8个6位的块,每块通过S盒置换产生4位的输出,8个块S盒置换后组成32位的输出。

S盒置换的过程为:6位中取第1位和第6位组成行号,剩余第2、3、4、5位组成列号,从S盒置换表中取出相应行、列的十进制数,并转化为4位二进制数,即为S盒输出。 *4、P盒置换:S盒置换后的32位输出数据,进行P盒置换,仍然输出为32位数据。 go标准库中DESFeistel轮函数代码如下:```gofuncfeistel(rightuint32,keyuint64)(resultuint32){//右侧32位扩展置换为48位,并与48位子密钥做异或运算sBoxLocations:=key^expandBlock(right)varsBoxResultuint32fori:=uint8(0);ii++{//sBoxLocations42、sBoxLocations=6,按每6位分块sBoxLocation:=uint8(sBoxLocations42)0x3fsBoxLocations=6//6位中取第1位和第6位组成行号row:=(sBoxLocation0x1)|((sBoxLocation0x20)4)//剩余第2、3、4、5位组成列号column:=(sBoxLocation1)0xf//feistelBox包括了S盒置换和P盒置换的实现sBoxResult^=feistelBox[16*row+column]}returnsBoxResult}varfeistelBox[8][64]uint32//P盒置换funcpermuteBlock(srcuint64,permutation[]uint8)(blockuint64){forposition,n:=rangepermutation{bit:=(srcn)1block|=bituint((len(permutation)-1)-position)}return}//初始化feistelBoxfuncinit(){fors:=rangesBoxes{fori:=0;ii++{forj:=0;j16;j++{f:=uint64(sBoxes[j])(4*(7-uint(s)))f=permuteBlock(f,permutationFunction[:])feistelBox[16*i+j]=uint32(f)}}}}//代码位置src/crypto/des/```附go标准库中使用的扩展置换表和P盒置换表:```go//扩展置换表varexpansionFunction=[48]byte{0,31,30,29,28,27,28,27,26,25,24,23,24,23,22,21,20,19,20,19,18,17,16,15,16,15,14,13,12,11,12,11,10,9,8,7,8,7,6,5,4,3,4,3,2,1,0,31,}//P盒置换表varpermutationFunction=[32]byte{16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7,}//代码位置src/crypto/des/```附go标准库中使用的S盒置换表:```govarsBoxes=[8][4][16]uint8{//S-box1{{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-box2{{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-box3{{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-box4{{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-box5{{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-box6{{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-box7{{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-box8{{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},},}//代码位置src/crypto/des/```##3DESDES是一个经典的对称加密算法,但也缺陷明显,即56位的密钥安全性不足,已被证实可以在短时间内破解。

为解决此问题,出现了3DES,也称TripleDES,3DES为DES向AES过渡的加密算法,它使用3条56位的密钥对数据进行三次加密。

为了兼容普通的DES,3DES并没有直接使用加密-加密-加密的方式,而是采用了加密-解密-加密的方式。

当三重密钥均相同时,前两步相互抵消,相当于仅实现了一次加密,因此可实现对普通DES加密算法的兼容。

3DES解密过程,与加密过程相反,即逆序使用密钥。

go标准中3DES加密算法的实现如下:```gotypetripleDESCipherstruct{cipher1,cipher2,cipher3desCipher}funcNewTripleDESCipher(key[]byte)(,error){iflen(key)!=24{returnnil,KeySizeError(len(key))}c:=new(tripleDESCipher)(key[:8])(key[8:16])(key[16:])returnc,nil}//3DES加密func(c*tripleDESCipher)Encrypt(dst,src[]byte){(dst,src)(dst,dst)(dst,dst)}//3DES解密func(c*tripleDESCipher)Decrypt(dst,src[]byte){(dst,src)(dst,dst)(dst,dst)}//代码位置src/crypto/des/```##后记相比DES,3DES因密钥长度变长,安全性有所提高,但其处理速度不高。

因此又出现了AES加密算法,AES较于3DES速度更快、安全性更高,后续单独总结。

感谢关注分享!。