des算法明文IP置换C语言编程,关于C语言DES加密算法实现.doc

本文档详细介绍了C语言中DES加密算法的实现步骤,包括明文和密文的二进制转换、初始IP置换、密钥置换、压缩置换、扩展变换、异或运算以及S盒和P置换的过程。同时,作者指出了代码中存在的错误,并提供了错误分析,帮助读者理解并修正代码问题。

关于C语言的DES加密算法实现.txt13母爱是迷惘时苦口婆心的规劝;母爱是远行时一声殷切的叮咛;母爱是孤苦无助时慈祥的微笑。/*****************************************

*author:TroyLiu

*time: 2011.05.26

*说明:由于本人C语言编程能力有限,此代码仅供参考。

* 其中各个功能的实现具有一定的参考价值。

* 代码的部分书写习惯亦可参考。

* 如果有能力者,可以考虑分函数完成。

* 请记住:所有的代码都写到main()函数是一个很不良的编程习惯!!!

******************************************/

/********************************************

*这仅是DES的第一轮加密

*输入明文:computer#

*输入密文:program#

*书本的错误:

*1.密钥k经过置换后得到的D0最后一位有错误,应该为1 (这个错误不影响往后的结果)

*2.通过8个s盒得到32位的序列第二组前四位有错,应该为1101,而不是0011

*3.往后的结果均由上2的错误导致

********************************************/

/********DES密码的加密过程******************

*1.将字母转化为二进制数(明文&密文)分成两组完成

*2.对明文m进行初始IP置换完成

*3.对密钥k进行密钥置换完成

*4.对密钥k进行压缩置换完成

*5.对R0进行扩展变换32->48完成

*6.结果和k进行异或运算完成

*7.将结果分成8组,通过8个s盒完成

*8.对s盒的输出序列进行P置换完成

*9.对p置换的结果与L0进行异或运算完成

********************************************/

#include

int ip[] = {//IP置换

58,50,42,34,26,18,10, 2,60,52,44,36,28,20,12, 4,

62,54,46,38,30,22,14, 6,64,56,48,40,32,24,16, 8,

57,49,41,33,25,17, 9, 1,59,51,43,35,27,19,11, 3,

61,53,45,37,29,21,13, 5,63,55,47,39,31,23,15, 7

};

int jiou[] = {

7,15,23,31,39,47,55,63//进行密钥添加奇偶校验位使用

};

int ki[] = {//密钥置换

57,49,41,33,25,17, 9, 1,58,50,42,34,26,18,

10, 2,59,51,43,35,27,19,11, 3,60,52,44,36,

63,55,47,39,31,23,15, 7,62,54,46,38,30,22,

14, 6,61,53,45,37,29,21,13, 5,28,20,12, 4

};

int kyasuo[]= {//对密钥进行压缩置换

14,17,11,24, 1, 5, 3,28,15, 6,21,10,

23,19,12, 4,26, 8,16, 7,27,20,13, 2,

41,52,31,37,47,55,30,40,51,45,33,48,

44,49,39,56,34,53,46,42,50,36,29,32

};

int mkuozhan[]= {

32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9,

8, 9,10,11,12,13,12,13,14,15,16,17,

16,17,18,19,20,21,20,21,22,23,24,25,

24,25,26,27,28,29,28,29,30,31,32, 1

};

int s[8][4][16] = {//8个s盒

{

{14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7},

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值