资源描述:
《des加密算法27451》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、DES加密算法—实现(C语言)DES(DataEncryptStandard数据库加密标准)是迄今为止使用最广泛的加密体制。 初学信息安全的新生,一般都会被老师要求实现DES算法,如果老师不要求,那么有缘来我这里共同学习的朋友,我建议你用C去实现一下,C语言在信息安全领域很重要,更何况隶属于工科的信息安全,你只懂理论是远远不够的。 想用其他语言实现的朋友,如果你用了汇编,那么请您老人家走开不要来看小弟的笑话。如果你用C++或者JAVA,那么我劝您用C吧,因为2年前本人计算过速度,在我的机器上,同样的代码,
2、用C++新建的工程要比用C新建的工程慢了2倍。至于JAVA,我估计要慢10倍。 废话不多说,DES算法的理论我就不聒噪了,想要了解其实现的人,如果不懂其理论就来看这文章,即便是看懂了也会走火入魔,或者是某位学生心怀不轨。 一个加密算法的实现,最最重要的关键词是—速度。 举个例子来说明,速度对加密算法的重要:假设我们实现了两个加密算法DES1.0和DES2.0,其中DES1.0的速度为900KB/S,DES2.0的速度为1000KB/S。假设一个文件有10G,我需要对其进行加密,那么,用DES
3、1.0所耗费的时间为1111s,DES2.0的速度为1000S。DES2.0比DES1.0快了111秒。现实生活里我们要加密的数据还可能远远不止10G。不要小看这111S,要知道,让CPU尽可能的为用户服务,是我们每一个程序员的职责,不论你是用C,C++还是JAVA。 因此,为了速度,我们必须舍弃一些东西。 有的同学喜欢用动态数组,因为这也是个好东西,可以节约空间,于是有人认为用了动态数组的程序比不用动态数组的程序要高了好几级。 动态数组貌似高深,但如果你用在加密算法里,我只能说这位同学啊你真是吃力
4、不讨好,在计算机世界里,往往静态的东西就是比动态的东西速度要快。 在此我首先声明,如果你不是在练习结构体和malloc/calloc的使用,那么请你果断舍弃这些在加密算法里华而不实的东西。 好了,说了这么多,各位看官都等急了吧,下面我就结合DES算法原理来分步骤讲解我的代码。 一、准备 首先,头文件与宏定义。C代码 1.#include "stdio.h" 2.#include "memory.h" 3.#include "time.h" 4.#include "stdlib.h"
5、 5. 6.#define PLAIN_FILE_OPEN_ERROR -1 7.#define KEY_FILE_OPEN_ERROR -2 8.#define CIPHER_FILE_OPEN_ERROR -3 9.#define OK 1 其次,对基本数据类型进行typedef。 这句是不可以少的,请养成良好习惯,不然以后如果你要修改基本数据类型,累死你。 C代码 1.typedef char ElemType; 而后,是初始置换表,逆初始置换表,S-Box等已
6、知数据。 C代码 1. //初始置换表IP 2.int IP_Table[64] = { 57,49,41,33,25,17,9,1, 3. 59,51,43,35,27,19,11,3, 4. 61,53,45,37,29,21,13,5, 5. 63,55,47,39,31,23,15,7, 6. 56,48,40,32,24,
7、16,8,0, 7. 58,50,42,34,26,18,10,2, 8. 60,52,44,36,28,20,12,4, 9. 62,54,46,38,30,22,14,6}; 10.//逆初始置换表IP^-1 11.int IP_1_Table[64] = {39,7,47,15,55,23,63,31, 12. 38,6,46,14,54,22,62,3
8、0, 13. 37,5,45,13,53,21,61,29, 14. 36,4,44,12,52,20,60,28, 15. 35,3,43,11,51,19,59,27, 16. 34,2,42,10,50,18,58,26, 17.