2.2 IDEA子密钥的产生
2.2.1 加密子密钥的产生
IDEA一次完整的加密运算需要52个子密钥,它们都是由一个128位的加密密钥产生的。其产生方法如下:
首先将128位加密密钥分成8份:Z1、Z2……、Z8,其中Z1对应加密密钥中的最高有效的16位,而Z8则对应于加密密钥中的最低有效的16位。然后将加密密钥循环左移25位后,用同样的方法得到另外的新的8个子密钥,如此Z1到Z52陆续生成52个子密钥。
2.2.2解密子密钥的产生
IDEA的解密过程与加密过程完全相同,即将密文分组作为输入而逐步恢复明文,所不同的是参与迭代运算的解密子密钥的生成方式。解密子密钥U1、U2、……、U52是从加密密钥Z1、Z2……、Z8导出的。解密过程中的第i轮循环的头4个子密钥是从加密循环的第(10-i)的头4个子密钥导出的,其中变换阶段被记为循环9。解密密钥的第1个和第4个子密钥等于对应的第1个和第4个加密密钥的模216+1乘法逆元。从第2到第8个循环,第2和第3个解密子密钥等于对应的第2个和第3个加密子密钥的模216加法逆元,而第1和第9个循环的第2和第3个解密子密钥等于对应的第2个和第3个加密密钥的模216加法逆元。而对于头8个循环来说,循环i的最后两个解密子密钥等于加密循环(9-i)的最后两个子密钥。
3 源代码解析
3.1 实例使用的简单说明
3.1.1实例运行说明 本实例的开发平台为Windows和VC++8.0。程序运行是需要提供两个输入:一是需要加/解密的文件的文件名,另一个是用户自己提供的128位会话密钥。需要加密的明文数据需要用文本文件(.txt)存放,程序运行的第一步首先就是按用户输入的文件名将需要加/解密的文件打开,若文件打开失败(文件不存在或文件名或扩展名错)则程序自动退出。加密后生成的加密文件的文件名与明文文件名相同,但扩展名为.enc,如果是解密,则解密生成的明文文件名为tempfile.txt。
|