Blowfish秘钥加密

Blowfish

1.两个box:  ungigned long pbox[18]和unsigned long sbox[4,256]

2.加密函数BF_En(), 输入64位信息,输出64位密文

3.过程:

(1)秘钥处理

源秘钥(pbox, sbox固定的),要加密的信息,和自己选择的一个key,---> key_pbox 和key_sbox, 作为信息加密过程的处理数据

1)用sbox填充key_sbox 
2)用自己选择的key8,个一组地去异或pbox,用异或的结果填充key_pbox。key可以循环使用。 
比如说:选的key是"abcdefghijklmn"。则异或过程为: 
key_pbox[0]=pbox[0]^abcdefgh 
key_pbox[1]=pbox[1]^ijklmnab 
………… 
………… 
如此循环,直到key_pbox填充完毕。 
3)用BF_En加密一个全0的64位信息,用输出的结果替换key_pbox[0]和key_pbox[1]。i=0 
4)用BF_En加密替换后的key_pbox[i],key_pbox[i+1],用输出替代key_pbox[i+2]和key_pbox[i+3] 
5)i+2,继续第4步,直到key_pbox全部被替换 
6)用key_pbox[16]和key_pbox[17]做首次输入(相当于上面的全0的输入),用类似的方法,替换key_sbox 信息加密。信息加密就是用函数把待加密信息x分成32位的两部分:xL,xR BF_En对输入信息进行变换,BF_En函数详细过程

 

对于i=1至16 
xL=xL^Pi 
xR=F(xL)^xR 
交换xL和xR(最后一轮取消该运算) 
xR=xR^P17 
xL=xL^P18 
重新合并xL和xR 
函数F见下图:

8位 32位 
|-----------S盒1----------- 
| |加 
| 8位 32位 |---- 
|-----------S盒2----------- | 
| | 
| |异或---- 
32位-| | | 
| 8位 32位 | | 
|-----------S盒3--------------- |加 
| |-----------------32位 
| | 
| | 
| 8位 32位 | 
|-----------S盒4-----------------------

把xL分成4个8位分组:a,b,c和d 
输出为:F(xL)=((((S[1,a]+S[2,b])MOD 4294967296)^s[3,c])+S[4,d])MOD 4294967296 
(2的32次方) (2的32次方) 
重新合并后输出的结果就是我们需要的密文。 
用BlowFish算法解密,同样也需要两个过程。 
1.密钥预处理 
2.信息解密 
密钥预处理的过程与加密时完全相同 
信息解密的过程就是把信息加密过程的key_pbox逆序使用即可。

可以看出,选择不同的key,用BlowFish算法加密同样的信息,可以得出不同的结果。 
要破解BlowFish算法,就是要得到BlowFish算法的key。所以,使用BlowFish算法进行加密,最重要的也就是key的选择以及key的保密。其中key的选择可以使用bf_sdk中的_WeakKey函数进行检验。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值