乐乐天 发表于 2004-11-26 20:08:38

BLOWFISH加密算法[转帖]

<b>一、BlowFish算法说明</b>(文中数据类型以Tc2.0为准) <br>
<br>
  BlowFish算法用来加密64Bit长度的字符串。 <br>BlowFish算法使用两个“盒”——ungigned long pbox和unsigned long sbox。 <br>BlowFish算法中,有一个核心加密函数:BF_En(后文详细介绍)。该函数输入64位信息,运算后, 以64位密文的形式输出。 用BlowFish算法加密信息,需要两个过程:<br><br>
1.密钥预处理 <br>
2.信息加密 <br>
<br>
分别说明如下: <br>
密钥预处理: <br>BlowFish算法的源密钥——pbox和sbox是固定的。我们要加密一个信息,需要自己选择一个key, 用这个key对pbox和sbox进行变换,得到下一步信息加密所要用的key_pbox和key_sbox。具体的变化算法如下: <br>
<br>
1)用sbox填充key_sbox <br>
2)用自己选择的key8个一组地去异或pbox,用异或的结果填充key_pbox。key可以循环使用。 <br>比如说:选的key是"abcdefghijklmn"。则异或过程为: <br>key_pbox=pbox^abcdefgh <br>key_pbox=pbox^ijklmnab <br>………… <br>………… <br>如此循环,直到key_box填充完毕。 <br>
3)用BF_En加密一个全0的64位信息,用输出的结果替换key_pbox和key_pbox。i=0 <br>
4)用BF_En加密替换后的key_pbox,key_pbox,用输出替代key_pbox和key_pbox <br>
5)i+2,继续第4步,直到key_pbox全部被替换 <br>
6)用key_pbox和key_pbox做首次输入(相当于上面的全0的输入),用类似的方法,替换key_sbox 信息加密。信息加密就是用函数把待加密信息x分成32位的两部分:xL,xR BF_En对输入信息进行变换,BF_En函数详细过程如下: <br>
<br>
对于i=1至16 <br>xL=xL^Pi <br>xR=F(xL)^xR <br>交换xL和xR(最后一轮取消该运算) <br>xR=xR^P17 <br>xL=xL^P18 <br>重新合并xL和xR <br>函数F见下图: <br>
<br>8位 32位 <br>|-----------S盒1----------- <br>| |加 <br>| 8位 32位 |---- <br>|-----------S盒2----------- | <br>| | <br>| |异或---- <br>
32位-| | | <br>| 8位 32位 | | <br>|-----------S盒3--------------- |加 <br>| |-----------------32位 <br>| | <br>| | <br>| 8位 32位 | <br>|-----------S盒4----------------------- <br>
<br>
把xL分成4个8位分组:a,b,c和d <br>
输出为:F(xL)=((((S+S)MOD 4294967296)^s)+S)MOD 4294967296 <br>(2的32次方) (2的32次方) <br>重新合并后输出的结果就是我们需要的密文。 <br>用BlowFish算法解密,同样也需要两个过程。 <br>
1.密钥预处理 <br>
2.信息解密 <br>密钥预处理的过程与加密时完全相同
页: [1]
查看完整版本: BLOWFISH加密算法[转帖]