图2-2加密函数f的运算框图
E运算是一个函数,它将32位输入数据扩充为48位的数据块作为输出。E(R)的前
三位在R中的位置分别是32, 1和2,而E(R)中的最后两位则分别是R中是第32和1位。
表2-3 E变换表
每个单独的选择函数S1 ,S2... ., S8 ,将6位数据块作为输入,并且产生4位数据块作为输出,选择函数S,根据下表进行运算。
表2-4选择函数S1
假设S1是如上表定义的选择函数,B是输入的6位数据块,那么S1(B)定义如下:B的第1和6位构成0~3的一个数,设它为i。B的中间4位代表0~15的一个数,设它为j。在上表中查询第i行,第j列的那个数。比如,输入6位数据为011011,行是01,表示第1行,列由1101定义,表示第13列。第l行第13列的数是5,那么输出就0101
选择函数S1 ,S2... ., S8分别如下所示;
表2-5选择函数S
图2-2中的P运算如下表所示:
表2-6 P运算
2.1.4子密钥生成
图2-3子密钥生成
首先,64位的密钥KEY通过阵列选择变换操作PC-1,成为48位数据。
这48位数据又被分成两个部分,第1部分为C0,第2部分为D0。如果KEY的数据从1到64进行标号,那么C0就分别是KEY的57, 49, 41, ??,44和36位,同样地,D0分别是KEY的63, 55, 47,??,12和4位。
表2-7 PC-1
C0和D0定义后,再接着定义Cn和Dn如何从Cn-1:和Dn-1得到,n=1,2, ??,16。 这是根据表7的每个数据块的左移运算完成的。
表2-8左移表