图中符号含义:
IP:预定义的初始置换
Fk:包含置换、替代操作且依赖于密钥的变换,公式:
具体算法如图所示:
SW:将输入的数据进行高四位和第四位交换;
IP-1:IP的逆置换;
RLC_1:循环左移1位;
RLC_2:循环左移2位
算法概述:
先生成密钥:
1. 需要产生两个密钥,输入的10位密钥,然后进行P10置换(类似于DES中的IP置换),将结果分为两组,设为L和R;
2. 两组分别进行循环左移1位操作,得到L1和R1;
3. 将L1和R1合并,并将合并的数据经过P8置换,得到8位的密钥K1;
4. L1和R1再次进行循环左移2位操作,得到L2和R2;
5. 将L2和R2进行合并,并将合并的数据通过P8置换,得到8位的密钥K2;
明文加密:
1. 对8位明文M0进行IP置换,得到M1;
2. 将M1分为两部分M1L和M1R,然后将M1L和M1R代入到fk中进行变换
3. 在fk中,首先对M1R通过E/P扩展变换将四位M1R扩展位八位,然后这八位同密钥K1进行模2加运算,将得到的结果分为两部分并且分别通过S0和S1进行和变换,变换后每一部分只剩2位。这两位进行合并,通过P4变换得四位的M1RP,然后将M1RP和M1L进行模2加运算得到四位的L,然后将L同M1R进行合并得到M2。
4. 然后将M2通过SW变换,即将其高四位和低四位进行交换。
5. 再通过fk函数(过程同3)
6. 再通过IP-1变换得到八位密文。
解密的时候其实就是把密钥使用的顺序颠倒一下。
有了DES的基础,这个就比较容易了
不过要把fk函数叙述清楚了还真不是件容易事,哎,文学呀,文学
- from the5fire.com
----EOF-----
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈