3.1.2 主要函数及流程说明
本实例代码是对IDEA加密算法的独立实现,不涉及到与其他系统和应用的交互。
本实例代码实现主要包括两部分:
(1)头文件部分:idea.h。该部分包含了本实例所需要的系统函数以及与IDEA相关的数据结构和函数的声明。
(2)算法核心代码部分:idea.cpp。该部分是IDEA算法的加/解密和子密钥生成的实现部分。主要包括如下几个函数(按函数出现的顺序进行介绍,函数中的疑难语句将在源代码中以注释的方式给出):
1)static uint16 inv(uint16 x)
该静态函数的功能是提供由加密密钥得到解密密钥的模运算:加密密钥与解密密钥的模216+1乘运算: 1 MOD(216+1)。前文已经提到,由加密子密钥通过计算模加和模乘运算的逆元即可得到解密子密钥。函数的返回值为16位的无符号整数,参数x也为16位的无符号整数。
2)static void en_key_idea(word16 *userkey, word16 *Z)
该静态函数的功能是将用户提供的128位会话密钥产生生成迭代运算所需要的52个子密钥。该函数没有返回值,生成的52个子密钥存放在一个16位的数组Z中,Z为该函数的参数之一,另一个参数是指向16位的字类型的指针(16*8=128位)。
3)static void de_key_idea(IDEAkey Z,IDEAkey DK)
该静态函数的功能是生成解密子密钥,并将其存放到数组Z中。
4)uint16 mul(uint16 a, uint16 b)
该函数的功能是实现模乘运算。(见图1图例说明部分。)
5)static void cipher_idea(word16 in[4],word16 out[4],register CONST IDEAkey Z)
该静态函数是本算法的核心代码部分,其功能就是在获得64位明文的4个16位子分组和52个子密钥的基础上实现图1所示的加/解密迭代运算过程。
6)void cipher_file(FILE *in,FILE *out,word16 *key)
该函数的功能就是调用5)中的加密函数实现对给定明文文件(.txt文件)和给定的128位会话密钥的IDEA加密。
7)void decipher_file(FILE *in,FILE *out,word16 *key)
该函数的功能是实现解密。由于IDEA加密算法的加解密过程完全一样,所不同的仅仅是解密过程中用到的是由52个加密子密钥导出的52个解密子密钥。
8)void swap_files_and_clean_up(char *file)
该函数的功能是将加/解密的结果以文件形式存放到磁盘。
|