首页
社区
课程
招聘
[旧帖] [原创]密码学学习之DES 0.00雪花
发表于: 2009-10-31 08:25 1581

[旧帖] [原创]密码学学习之DES 0.00雪花

2009-10-31 08:25
1581
密码学小组的人说我原来写的那个太冗余了(我理解的是这个意思),所以我把我的原来的那篇文章重新写了一遍,但是前面的介绍不分我还是留下了,因为我觉得这几点问题是对我程序的说明,能够让别人看懂我的程序。
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

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
给些建议,学习下。
2009-10-31 11:57
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
太冗余了
。。。。。。。。。。。
貌似我不是这个意思,算法特性还是没写好,不过不错了
2009-10-31 17:13
0
游客
登录 | 注册 方可回帖
返回
//