sha256算法加密解密工具,SHA加密算法
上课做有趣的实验,大家一起学习吧~
DES加密算法编程实现zjdhj(博士),华南理工大学软件学院
实验的目的
利用DES算法对实验数据进行加密和解密,掌握现代分组密码算法的基本原理,掌握DES算法各部分的运算原理和具体运算过程。
实验原理目前加密算法可以分为对称加密和非对称加密。区别主要是基于所采用的键之间的关系。在对称加密中,加密密钥和解密密钥可以是相同的,也可以很容易地导出。在非对称加密算法或公钥加密中,加密密钥不同于解密密钥,解密密钥不能从加密密钥导出。
根据对明文的处理方式,加密算法分为流密码和分组密码。仅对明文中的一位(有时是一个字节)操作一次的密码称为流密码。对明文中的一组位进行操作。这几组位称为块,例如64位称为块,对应的密码称为块密码。
1973年,美国国家标准局(NBS)开始收集用于加密政府机构、商业部门和人民的非机密数据的标准数据加密标准算法(DES)。IBM基于1971年完成的LUCIFER密码(64位组,128位密钥)改进了建议的DES。改进后的DES算法只用56位密钥,S盒的修改被列为官方机密,饱受诟病。1975年3月17日,NBS发布了该算法,并解释说这是一个联邦信息处理标准,征求各方意见。1977年1月15日,通过—FIPSPUB 46,联邦标准,DES芯片设计上市。1981年,ANSI采用DES作为标准,即DEA[ANSI X3.92]。1983年,ISO采用DES作为标准,即DEA-1。数据加密标准(des)是一种优秀的对称分组加密算法,它是NIST在2000年10月2日发布AES算法之前的行业标准。
DES加密:图1显示了DES加密的整个机制。有两种加密方法:明文和密钥。DES的明文长度为64位,密钥长度为56位。
从图1的左半部分可以看出,明文处理经历了三个阶段。首先,64位明文通过初始置换()排序。然后,同一个函数执行16次(也叫迭代),每次都执行替换和替代操作。这16次迭代运算可以看作是一个包含64位明文和16个轮密钥的函数(具体见下文,图1中的K1),其输出是一个64位的比特流,或者说是最终的迭代输出。输出的左半部分(左32位)和右半部分(右32位)为互换(即图中32位交替),以产生待机输出。最后,准备好的输出通过另一个初始排列()生成一个64位密文,也称为逆初始置换。
图1的右半部分显示了使用56位密钥的过程。初始排列,即通过图中的置换选择1,循环左移排列,即通过图中的置换选择2,用于每个循环的重复。
初次更换:
表1和表2分别定义了初始排列和逆初始排列,这将在下面解释。表中输入标志为1~64,共64位。表示法中的64个元素代表从1到64的1个数字替换。替换表中的每个元素表示输入位在64位输出中的位置。
每次循环变换的详细过程:图2显示了循环变换的内部结构。先看图的左半部分。64位中间数据的左右部分被分成独立的32位数据格式,分别表示为L(左)和R(右)。任何一个经典的Feistel密码,每次循环变换的全过程都可以写成如下公式。
子密钥的长度是48位。r是32位。首先,将R扩展到表3中定义的置换(e) 48比特(参考表3中的扩展置换),其中重复16比特。48位和XOR输出,然后使用一个置换函数,即S-box来生成一个32位输出,并使用表4中定义的置换(P)来作用于该输出。
图3说明了S盒在函数f中的作用。置换函数由八个S盒组成,每个S盒有6位输入和4位输出。这些转换如表5所示。这里,在框中输入的第一位和最后一位构成2位二进制数,用于选择框中4行(编号0-3)的排列值之一,中间4位是编号0-15的16列)。将矩阵交点处的十进制数转换成二进制数,得到输出的4位二进制数。例如,在中,如果输入了位011001,则行为1(01),列为12)100。这里的值是9,所以输出是1001。请注意S盒的所有内容。
所有行都定义了一个常见的可逆替换。密钥生成:
回头看图1和图2,我们可以看到算法输入了一个64位的密钥,但是DES算法只使用了其中的56位。每个关键位从1到64进行标记,选择表6中无阴影的部分,即忽略每行的第8位。对于选中的56位密钥,首先运算置换选择1(表7),得到的56位密钥被分成两个28位密钥数据和。在每次迭代中,表8显示了一个或两个数字,分别为循环左移。移位后的值通过置换选择2(表9)的运算,生成一个48位的轮密钥作为函数的输入。
DES解密:
Feistel密码的解密算法和加密算法是一样的,只是轮密钥的使用顺序相反。
Python实现链接:https://github.com/kingboung/web-security/tree/master/DES雪崩效应:雪崩效应是一种不稳定的平衡状态,是加密算法的一个特性。意思是明文或密钥的小变化会引起密文的大变化。就像雪崩前,山看起来风平浪静,但稍有问题,就会引发大崩盘。实验表明,DES算法具有这一特性。可以通过以下几组数据来检验。
使用同一个密钥3354加密和解密两组明文—
64位密钥:
00000010 10010110 01001000 11000100 00111000 00110000 00111000 01100100
64位明文块1:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
64位明文块2(与只有一位的明文块1不同):
10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
输出两个密文块的二进制流,统计两个密文块之间不同的数据比特数。
使用不同的密钥加密和解密相同的明文。
64位密钥1:
11100010 11110110 11011110 00110000 00111010 00001000 01100010 11011100
64位密钥2(不同于只有一位的密钥1):
01100010 11110110 11011110 00110000 00111010 00001000 01100010 11011100
明文:
01101000 10000101 00101111 01111010 00010011 01110110 11101011 10100100
输出两个密文块的二进制流,统计两个密文块之间不同的数据比特数。
参考文献:[1] 《密码编码学与网络安全》威廉斯塔林斯(著),csdlz等人(译),电子工业出版社。
转载请告知!博主个人博客:http://www.kingboung.me
文章如有不完善之处,欢迎留言!阁下;大人;老爷
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。