-
-
[旧帖]
[原创]密码学学习之DES
0.00雪花
-
发表于:
2009-10-31 08:25
1629
-
[旧帖] [原创]密码学学习之DES
0.00雪花
密码学小组的人说我原来写的那个太冗余了(我理解的是这个意思),所以我把我的原来的那篇文章重新写了一遍,但是前面的介绍不分我还是留下了,因为我觉得这几点问题是对我程序的说明,能够让别人看懂我的程序。
1. DES密钥生成算法及其数据结构;
由用户输入8字节的密钥,经过输入变换转化为56位密钥,再分别将每一位扩充成一个整型(0或1),存至unsigned int peerkey[64];中,此后每轮加密分别使0~27和28~55循环移位,并经置换选择PC2_Table产生本轮密钥。
2. DES加、解密算法的概要描述及其数据结构设计;
DES的加、解密算法相同,只是子密钥的使用顺序不同。下面以加密为例:
读取64位明文,经过初始置换,开始进入16轮循环加密。
每轮加密将明文划分为32位长的两部分,其中右32位直接作为左32位的输出,右32位输出要经过如下变换:右32位经扩充矩阵E扩展至48位, 同本轮密钥(生成过程同1)异或后再经过S盒分组代换变为32位,经过P置换,再同原32位左侧输入异或后形成最终的右32位输出。将此过程重复进行16 次,最后的输出左右32位交换,经过逆初始置换后,形成最终密文。
DES的解密算法同加密算法,只不过将16轮加密的子密钥从第十六轮向第一轮输入。
3. 用DES加、解密BMP灰度图像的算法;
除让出某些特殊格式设置,基本方法同加密文本文件,只不过为保证加密后的数据仍可按图像处理,需让过bmp文件格式的文件头(140byte),加密其后的数据部分。
4. 随机明文生成算法及其数据结构设计;
首先随机确定一位基准位(每次均不改变),其余位由rand()%2生成,存为int。按此方法生成64个int,然后每8位紧缩成一个char,就生成了随机明文。只不过没有将之以char的形式输出,而是直接以0、1字符的形式输出。
5. S-盒的差分分布表计算算法;
DES的S盒是6位输入、4位输出,因此由64种不同的输入差分,16种不同的输出差分。具体计算方法如下:
取遍所有的明文对组合并计算异或,同时根据输入确定输出算出输出异或,使相应的异或序对的计数+1,最后统计各异或序对的计数值即可得出结果。
6. 基于某个线性函数计算的S-盒生成算法及其数据结构设计;
设计的线性函数:(a*x)mod16 其中a是从17开始取的整数,每用一次,对其加一。x是与16互素的数,对于8组S盒,一共要取32个这样的x。
7. 随机产生的S-盒生成算法及其数据结构设计;
共生成32组置换(每个S盒4个),一组置换由0~15按某种顺序构成。
生成算法:定义数组flag[16] = {0},用来记录某个数字是否已经产生,若已经产生过则更改相应位为1。这样在生成随机数(mod 16)时可以保证每组置换都由0~15数字构成,且不会出现重复和缺失情况。
DES算法网上有很多的介绍,在这里我并不多说,可以给大家一个链接,大家自己去看DES是什么意思,这里的算法介绍说明的很清楚:http://baike.baidu.com/view/584868.htm?fr=ala0
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!