BLOWFISH算法

BLOWFISH算法

Blowfish是一个64位分组及可变密钥长度的分组密码算法,算法由两部分组成:密钥扩展和数据加密。密钥扩展把长度可达到448位的密钥转变成总共4168字节的几个子密钥。
数据加密由一个简单函数迭代16轮,每一轮由密钥相关的置换,密钥相关和数据相关的代替组成。所有的运算都是32位字的加法和异或,仅有的另一个运算是每轮的四个查表。
Blowfish使用了大量的子密钥,这些密钥必须在加密及解密之前进行预计算。
P数组由18个32位子密钥组成:
P1,P2,P3,……P18
4个32位的S盒,每个有256个单元:
S[1,0],S[1,1],S[1,2],……S[1,255]
S[2,0],S[2,1],S[2,2],……S[2,255]
S[3,0],S[3,1],S[3,2],……S[3,255]
S[4,0],S[4,1],S[4,2],……S[4,255]
计算过程如下:
1.初始化P数组,然后是4个S盒用固定的串.这些串由π的十六进制组成.
2.用密钥的第一个32位与P1异或,用密钥的第二个32位与P2异或,依此类推,直到密钥的所有位(直到P18).周期性地循环密钥的所有位直到整个P数组与密钥异或完为止.
3.利用Blowfish算法加密全零串,其密钥为在第1和第2步中描述的子密钥.
4.用第3步的输出取代P1和P2.
5.利用Blowfish算法加密第3步的输出,其密钥为修改过的子密钥.
6.用第5步的输出取代P3和P4.
7.重重上述操作,直到P数组的所有元素及4个S盒全部被连续变化的Blowfish的输出所取代.

Blowfish是一个由16轮构成的Feistel结构.输入是64位数据x,加密过程为:

把x分成32位的两部分:xL,xR
对于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次方) 

解密时,除了P1,P2,P3……,P18以逆序使用外,与加密相同.

以下是Blowfish算法的图示:


明文
| 64位
32位 | 32位
---------------------------------------
| |
32位 | |
P1----------------异或 |
| 32位 32位 |
------------------F------------------异或
| | 
/ /
/ 相互交换 /
-----------------------------------
/ /
| |
| |
P2----------------异或 |
| |
------------------F------------------异或
| |
| |
/ /
/ 多于13次的迭代 /
---------------------------------
/ / 
/ /
| |
| |
P16---------------异或 |
| |
------------------F-----------------异或
| |
P18---------------异或 P17-----------------异或
| |
---------------------------------------
32位 | 32位
|64位
密文

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值