欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    加密算法文档.docx

    • 资源ID:9456263       资源大小:57.95KB        全文页数:37页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    加密算法文档.docx

    1、加密算法文档IDEA算法IDEA(International Data Encryption Algorithm)是瑞士的James Massey,Xuejia Lai等人提出的加密算法,在密码学中属于数据块加密算法(Block Cipher)类。IDEA使用长度为128bit的密钥,数据块大小为64bit。从理论上讲,IDEA属于“强”加密算法,至今还没有出现对该算法的有效攻击算法。早在1990年,Xuejia Lai等人在EuroCrypt90年会上提出了分组密码建议PES(Proposed Encryption Standard)。在EuroCrypt91年会上, Xuejia Lai等

    2、人又提出了PES的修正版IPES(Improved PES)。目前IPES已经商品化,并改名为IDEA。IDEA已由瑞士的Ascom公司注册专利,以商业目的使用IDEA算法必须向该公司申请许可。IDEA是一种由8个相似圈(Round)和一个输出变换(Output Transformation)组成的迭代算法。IDEA的每个圈都由三种函数:模(216 1)乘法、模216加法和按位XOR组成。在加密之前,IDEA通过密钥扩展(Key Expansion)将128bit的密钥扩展为52Byte的加密密钥EK(Encryption Key),然后由EK计算出解密密钥DK(Decryption Key)

    3、。EK和DK分为8组半密钥,每组长度为6Byte,前8组密钥用于8圈加密,最后半组密钥(4Byte)用于输出变换。IDEA的加密过程和解密过程是一样的,只不过使用不同的密钥(加密时用EK,解密时用DK)。密钥扩展的过程如下:1 将128bit的密钥作为EK的前8byte;2 将前8byte循环左移25bit,得到下一8byte,将这个过程循环7次;3 在第7次循环时,取前4byte作为EK的最后4byte;4 至此52byte的EK生成完毕。密钥扩展的过程如表1所示,为了能够清楚的看出每个8Byte的关系,在表1中用粗线条将将每个8Byte划分开了表1 IDEA的密钥扩展过程解密密钥EK和加密

    4、密钥DK的关系如表2所示:IDEA算法如图1所示。图1 IDEA算法IDEA算法相对来说是一个比较新的算法,其安全性研究也在不断进行之中。在IDEA算法公布后不久,就有学者指出:IDEA的密钥扩展算法存在缺陷,导致在IDEA算法中存在大量弱密钥类,但这个弱点通过简单的修改密钥扩展算法(加入异或算子)即可克服。在1997年的EuroCrypt97年会上,John Borst等人提出了对圈数减少的IDEA的两种攻击算法:对3.5圈IDEA的截短差分攻击(Truncate Diffrential Attack)和对3圈IDEA的差分线性攻击(Diffrential Linear Attack)。但作

    5、者也同时指出,这两种攻击算法对整8.5圈的IDEA算法不可能取得实质性的攻击效果。目前尚未出现新的攻击算法,一般认为攻击整8.5圈IDEA算法唯一有效的方法是穷尽搜索128bit的密钥空间。目前IDEA在工程中已有大量应用实例,PGP(Pretty Good Privacy)就使用IDEA作为其分组加密算法;安全套接字层SSL(Secure Socket Layer)也将IDEA包含在其加密算法库SSLRef中;IDEA算法专利的所有者Ascom公司也推出了一系列基于IDEA算法的安全产品,包括:基于IDEA的Exchange安全插件、IDEA加密芯片、IDEA加密软件包等。IDEA算法的应用

    6、和研究正在不断走向成熟Lai和Massey开发出IDEA加密算法雏形,称为PES,即建议的加密标准。第二年,根据有关专家对这一密码算法的分析结果,设计者对该算法进行了强化并称之为IPES,即改进的建议加密标准。该算法于1992年更名为IDEA,即国际加密标准。 IDEA算法的密钥长度为128位,针对64位的数据进行加密或解密操作.设计者尽可能使该算法不受差分密码分析的影响,XueJiaLai已证明IDEA算法在其8轮迭代的第4圈之后便不受差分密码分析的影响了。假定穷举法攻击有效的话,那么即使设计一种每秒种可以试验10亿个密钥的专用芯片,并将10亿片这样的芯片用于此项工作,仍需1013年才能解决

    7、问题;另一方面,若用1024片这样的芯片,有可能在一天内找到密钥,不过人们还无法找到足够的硅原子来制造这样一台机器。目前,尚无一片公开发表的试图对IDEA进行密码分析的文章。因此,就现在来看应当说IDEA是非常安全的。IDEA有大量的弱密钥,这些弱密钥是否会威胁它的安全性还是一个迷。IDEA密码能够抵抗差分分析和线性分析。设计者Lai认为IDEA不是一个群,但目前仍未得到证实。Eurocrypt97会议上给出了两种新的攻击低圈IDEA的方法,第一种攻击方法可破译大约35-圈的IDEA;第二种攻击方法可破译大约3-圈的IDEA。但从分析结果来看,这两种攻击方法并未对IDEA的安全性构成威胁。2.

    8、IDEA算法概述IDEA是一个迭代分组密码,分组长度为64比特,密钥长度为128比特。IDEA密码中使用了以下三种不同的运算:逐位异或运算;模216加运算;模2161乘运算,0与216对应。IDEA算法是由8轮迭代和随后的一个输出变换组成。它将64比特的数据分成4个子块,每个16比特,令这四个子块作为迭代第一轮的输出,全部共8轮迭代。每轮迭代都是4个子块彼此间以及16比特的子密钥进行异或,模216加运算,模2161乘运算。除最后一轮外把每轮迭代输出的四个子块的第二和第三子块互换。该算法所需要的混淆可通过连续使用三个不相容的群运算于两个16比特子块来获得,并且该算法所选择使用的MA-(乘加)结构

    9、可提供必要的扩散。3.IDEA算法的具体描述3.1密钥生成用户输入128位长密钥Key=k1k2k3k127k128IDEA总共进行8轮迭代操作,每轮需要6个子密钥,另外还需要4个额外子密钥,所以总共需要52个子密钥,这个52个子密钥都是从用户输入的128位密钥中扩展出来的.首先把输入的Key分成8个16位的子密钥,16号子密钥供第一轮加密使用,78号子密钥供第二轮使用,然后把这个128位密钥循环左移25位,这样Key=k26k27k28k24k25把新生成的Key在分成8个16位的子密钥,14号子密钥供第二轮加密使用(前面已经提供了两个)58号子密钥供第三轮加密使用,到此我们已经得到了16个

    10、子密钥,如此继续,当循环左移了5次之后已经生成了48个子密钥,还有四个额外的子密钥需要生成,再次把Key循环左移25位,选取划分出来的8个16位子密钥的前4个作为那4个额外的加密密钥.供加密使用的52个子密钥生成完毕.K0K1K2K3K4K5K48K49K50K51第一轮额外密钥3.2加密明文64-位数据分组被分成4个16-位子分组:D0,D1,D2,D3。这4个子分组成为算法的第一轮的输入,总共有8轮。密钥(6组)K1,K2,K3,K4,K5,K6执行的顺序如下:D0和第一个子密钥(K1)模2161乘。D1和第二个子密钥(K2)模216加。D2和第三个子密钥(K3)模216加。D4和第四个子

    11、密钥(K4)模2161乘。第(1)步和第(3)步的结果相异或。将第(2)步和第(4)步的结果相异或。将第(5)步的结果与第五个子密钥(K5)模2161乘。将第(6)步和第(7)步的结果模216加。将第(8)步的结果与第六个子密钥(K6)模2161乘。将第(7)步和第(9)步的结果模216加。将第(1)步和第(9)步的结果相异或。将第(3)步和第(9)步的结果相异或。将第(2)步和第(10)步的结果相异或。将第(4)步和第(10)步的结果相异或。将第(11)、(12)、(13)和(14)步的结果形成的4个子分组D0,D1,D2,D3作为输出,然后将中间两个分组(D1,D2)交换(最后一轮除外)后

    12、,作为为下一轮的输入。经过8轮运算之后,有一个最终的输出D0,D1,D2,D3,对这4个输出子分组进行如下操作:(1)D0和第一个额外子密钥模2161乘。(2)D1和第二个额外子密钥模216加。(3)D2和第三个额外子密钥模216加。(4)D3和第四个额外子密钥模2161乘。最后,这4个子分组重新连接到一起产生密文。3.3.密文解密介绍IDEA加密算法的资料本就不多而且对于解密过程往往一笔带过,笔者在编程实现IDEA算法时为此大伤脑筋,好在这块骨头总算被啃下了.下文笔者将结合实现代码介绍一下解密过程,如果读者想亲自动手实现IDEA算法,笔者的”痛苦经验”是可以让你少走些弯路的.解密操作和加密的

    13、步骤基本相同,但是在求密钥时有所区别.首先从用户输入的128位密钥扩展出52个子密钥,存放在ULONG16Key52数组中,然后对这个52个子密钥进行换位操作, 原位置:6879450123 表中的原位置行的值代表该子密钥在原密钥数组中的位置,比如新密钥数组中的第0号子密钥为原来子密钥组中的第48号子密钥,对子密钥数组换位后,就需要对某些子密钥进行模2161的乘法逆或模216加法逆的替换,详情见下表(位置是针对换位后的子密钥组)12781314192025263132373843444950 03691215182124273033363942454851需要变化的子密钥总共1818=36个,

    14、另外的5236=16个子密钥不变化.下面介绍有关x逆元的计算方法.x-1=65536x X模2161乘法法逆和X的关系如下:(X*X-1)e537=1#defineLOW16(x)(x)&0xffff)ULONG16mulInv(ULONG16x)ULONG16t0,t1;ULONG16q,y;if(x43*/ -37*/ -31*/ -25*/ -19*/ -13*/ 6,8,7,9,4,5,/*解密密钥配置,2,3位要交换:87*/0,1,2,3;staticULONG8wz_spmulrevr18=/*变乘法逆的位*/0,3,6,9,12,15,18,21,24,27,30,33,36,

    15、39,42,45,48,51;staticULONG8wz_spaddrever18=/*变加法逆的位*/1,2,7,8,13,14,19,20,25,26,31,32,37,38,43,44,49,50;INT32mulInv(ULONG16x);/*取x的(%0x10001L)乘法逆*/INT32handle_data(ULONG16*data,/*待加密的64位数据首地址*/ULONG16*key/*6组本轮使用的16位长的密钥首地址*/);INT32idea_makekey(ULONG32*inkey,/*用户输入的128位密钥首地址*/ULONG16*outkey/*生成的52组16

    16、位密钥的首地址*/);INT32key_leftmove(ULONG32*inkey);INT32key_decryExp(ULONG16*outkey);/*解密密钥的变逆处理*/INT32MUL(ULONG16a,ULONG16b);/*(a*b)*/INT32idea_dec(ULONG16*data,/*待解密的64位数据首地址*/ULONG16*outkey)ULONG32i;ULONG16tmp;if(NULL=data|NULL=outkey)returnFAIL;for(i=0;i48;i=6)/*8轮*/handle_data(data,&outkeyi);/*交换中间两个*

    17、/tmp=data1;data1=data2;data2=tmp;tmp=data1;/*最后一轮不交换*/data1=data2;data2=tmp;data0=MUL(data0,outkey48);data1=outkey49;data2=outkey50;data3=MUL(data3,outkey51);returnSUCCESS;INT32idea_enc(ULONG16*data,/*待加密的64位数据首地址*/ULONG16*outkey)ULONG32i;ULONG16tmp;if(NULL=data|NULL=outkey)returnFAIL;for(i=0;i48;i=

    18、6)/*8轮*/handle_data(data,&outkeyi);/*交换中间两个*/tmp=data1;data1=data2;data2=tmp;tmp=data1;/*最后一轮不交换*/data1=data2;data2=tmp;data0=MUL(data0,outkey48);data1=outkey49;data2=outkey50;data3=MUL(data3,outkey51);returnSUCCESS;INT32handle_data(ULONG16*data,/*待加密的64位数据首地址*/ULONG16*key/*6组本轮使用的16位长的密钥首地址*/)ULONG

    19、16*D1,*D2,*D3,*D4;ULONG16D57;/*提供给第5,7步用的暂存数据的*/ULONG16D68;/*提供给第6,8,9,10步用的暂存数据的*/D1=&data0;D2=&data1;D3=&data2;D4=&data3;/*start*/*D1=MUL(*D1,key0);/*第1步*/*D2=key1;/*第2步*/*D3=key2;/*第3步*/*D4=MUL(*D4,key3);/*第4步*/D57=*D1*D3;/*第5步*/D68=*D2*D4;/*第6步*/D57=MUL(D57,key4);/*第7步*/D68=D57;/*第8步*/D68=MUL(D6

    20、8,key5);/*第9步*/*D1=D68;/*第11步*/*D3=D68;/*第12步*/D68=D57;/*第10步*/*D2=D68;/*第13步*/*D4=D68;/*第14步*/returnSUCCESS;INT32idea_makekey(ULONG32*inkey,/*用户输入的128位密钥首地址*/ULONG16*outkey/*生成的52组16位密钥的首地址*/)ULONG32i,j,k;ULONG16*Pkey=(ULONG16*)inkey;for(i=0;i6;i)k=i3;for(j=0;j8;j)/*生成8组密钥*/outkeykj=Pkeyj;key_leftm

    21、ove(inkey);/*128位密钥左环移25位*/for(i=0;i4;i)outkey48i=Pkeyi;returnSUCCESS;INT32key_leftmove(ULONG32*inkey)/*密钥左环移25位*/ULONG32itmpfirst=0,itmp=0;3.6加密工具的实现利用算法核心代码封装的接口函数笔者编写了一个加密工具,IDEA算法是对固定大小(64位)的数据块进行加密解密操作的,对于那些不够64位的数据块需要采用填充机制补位到64位长,为了方便使用,数据位的填充是对用户而言是透明的,利用该工具进行加密解密操作时,用户只需输入操作的类型、读取数据的文件名、写入操

    22、作结果的文件名、密钥等信息.#defineREADFILESIZE512以二进制的形式从文件中读取READFILESIZE个字节的数据,如果从文件中读出的数据少于READFILESIZE个,以0补足,然后根据用户指定的类型对这READFILESIZE个字节的数据进行操作.判断文件是否结束,如果还没有介绍则返回执行步骤1把加密后的文件实际长度和读出数据的文件名加密后添加到密文的末尾结束采用一次只从文件读取READFILESIZE个字节是在为了防止由于需要加密或解密的文件太大导致内存不够的情况出现.使用该程序加密文件,用户不必记住加密前文件的类型,程序会在解密时自动将密文恢复成原文件的类型和长度.3.6.1加密工具实现源代码下面列出按照上述操作思路编写的实现源代码/*/*-文件名:idea.c*/*-*/*-功能:利用idea加密算法实现文件的加密*/*-*/*-说明:*/*-这是利用IDEA算法实现的文件加密工具可以在法律允许范围内以非商*/*-业形式自由使用,该程序的所有权利由作者吴真保留*/*-*/*-版本号:1.0.0(2002.6)*/*/ /*-*/*


    注意事项

    本文(加密算法文档.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开