首页 > 编程知识 正文

实现文件加密算法,EDA实现SHA256加密算法

时间:2023-05-04 04:14:34 阅读:168451 作者:2808

上课时做有趣的实验,大家一起学习~

DES加密算法编程实现华南理工大学软件学院zjdhj (博士)

实验的目的

通过使用DES算法对实验数据进行加密和解密,掌握现代分组密码算法的基本原理,熟练掌握DES算法各部件的运算原理和具体运算过程。

实验原理目前,加密算法可以分为对称加密(Symmetric Cryptology )和非对称加密(Asymmetric Cryptology )。 其区别的依据主要是采用的密钥之间的关系。 在对称加密中,加密和解密密钥可以完全相同或者可以容易地导出。 在非对称加密算法或公钥加密中,加密密钥和解密密钥不同,并且在计算上不能从加密密钥导出解密密钥。

根据对明文的处理方式,加密算法分为流加密(Stream Cipher )和组加密(Block Cipher )。 只对明文中的一位(有时为字节)一次运算的密码称为流密码。 运算明文的一组位。 这些位集合称为分组,例如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 )是一种优秀的对称分组加密算法,在2000年10月2日NIST发布AES算法之前一直是业界标准。

DES加密:图1显示了DES加密的整个机制。 任意的加密方式有明文和密钥两种输入。 DES的明文长度为64位,密钥长度为56位。

从图1的左半部分可以看出,明文的处理经历了3个阶段。 首先,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位和异或输出,再用一个置换函数,即s框生成32位的输出,用表4定义的置换(p )作用输出。

图3说明了s框在函数f中的作用。 置换函数由8个s框构成,各s框输入6位,输出4位。 这些转换见表5。 在此,框中输入的第1位和最后一位构成2位的二进制数,用于选择框4行(编号0~3 )的置换值中的一行,中间的4位为16列)编号0~15 )中的一列。 将矩阵交叉点的十进制数转换为二进制数后得到输出的4位二进制数。 例如,在中,如果输入位011001,则行为1(01 ),列为12 ) 1100 )。此处的值为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算法是具备该性质的。可以通过以下几组数据进行测试。
使用同一密钥,对两组明文进行加密和解密———
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] 《密码编码学与网络安全》 William Stallings(著),csdlz等(译),电子工业出版社。

转载请告知!!博主个人博客:http://www.kingboung.me
文章有不完善的地方,请留言告知!My lord

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。