欢迎来到天天文库
浏览记录
ID:21813837
大小:54.50 KB
页数:5页
时间:2018-10-24
《des算法的c语言实现》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、DES算法的C语言实现:对称密码算法又称单钥或私钥或传统密码体制,其发方和收方使用相同的密钥,即加密密钥和解密密钥是相同的。在众多的常规密码中影响最大的是DES密码。该文介绍DES算法的C语言实现。 关键词:DES;密钥;初始置换;逆置换 :TP311:A:1009-3044(2011)10-2295-02 TheRealizationofDESAlgorithmationTechnology,DalianOceanUniversity,Dalian116023,China) Abstract:Symmetrickeycrypt
2、ography,alsocalledsinglekeyorprivatekeyortraditionalcryptography,ekey,intheothermetrickeycryptography.ThispaperdescribesDESalgorithmusingClanguage. Keyutation;inversepermutation 随着计算机X络不断渗透到各个领域,密码学的应用也随之扩大。而DES是国际上商用保密通信和计算机通信的最常用的加密算法[1]。本文重点介绍DES算法的C语言实现。 1DES概述 美
3、国国家标准局(NBS)于1977年公布了由IBM公司研制的一种加密算法,并批准把它作为非机要部门使用的数据加密标准(DataEncryptionStandard),简称DES[2]。 2程序结构框架 该C程序有3个入口参数,Data、Key和Mode。其中Key为8字节共64位,是DES算法的工作密钥;Data也为8字节64位,是要被加密或解密的数据;Mode为工作方式:等于1时为加密,等于0时为解密。 程序首先由密钥Key通过密钥扩展算法得到16个子密钥,存放在k[0]—k[15]中。然后判断Mode的值,若Mode=0,即为解
4、密,将子密钥数组k反置,即k[0]与k[15]互换、k[1]与k[14]互换,依此类推。 得到16个子密钥后,对Data作初始置换IP,再将置换后的Data分成两部分,前32位为L,后32位为R。然后从i=0到i=14作15轮循环,每次循环作如下工作:L=R;R=L⊕F(R,k[i])。共作15轮循环而非16轮,这是因为DES算法中作的16轮迭代,在最后一轮并不进行左右交换,所以把第16轮迭代在循环外单独实现,即在循环结束时作L=L⊕F(R,k[i])。 最后合并L、R即得到64位输出结果,Mode=1时输出的是密文,Mode=0时
5、输出的是明文。程序流程如图1所示。 3程序的几个关键部件详解 程序有几个关键部件,分别是:子密钥的生成,初始置换IP与其逆置换IP-1,F函数等[3]。以下一一作详解。 3.1子密钥的生成 从用户处得到的64位密钥Key中,每8位为一组,每组第8位是校验位。在加/解密过程中,校验位是没用的。所以首先将Key由缩减变换PC-1缩减到56位。具体实现过程如下:把PC-1表存入数组pc1中,缩减时只需循环作K[i]=Key[pc1[i]]即可(56次)。数组pc1定义如下: staticintpc1[]={ 57,49,41,33
6、,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}; 把置换后的密钥分为C[0]和D[0]两部分,各28位。从i=0开始,分别对C[i]和D[i]进行循环左移一到两位的位移操作,得到C[i+1]和D[i+1]。每轮的移位量存入数组LS中。LS定义如下: staticintLS[]={1,1
7、,2,2,2,2,2,2,1,2,2,2,2,2,2,1}; 串联C[i+1]和D[i+1],再把串联得到的数据经过缩减变换PC-2缩减到48位,具体实现同缩减变换PC-1。得到的48位数据即为子密钥k[i]。PC-2表存在数组pc2中,数组pc2定义如下: staticintpc1[]={ 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,
8、42,50,36,29,32}; 循环16次,便得到16个子密钥。 3.2初始置换IP与其逆置换IP-1 初始置换IP与其逆置换IP-1的实现比较简单,方法类似于生成子密钥中的缩减变换PC-1和PC-
此文档下载收益归作者所有