Blowfish简介

1.简介

Blowfish是由Bruce Schneier开发的,它是个非常强大的对称密钥加密算法。Blowfish的设计目标如下:
 快速:Blowfish在32位微处理器中的加密速率为每个字节26个时钟循环。
 紧凑:Blowfish可以在不到5kb的内存中执行。
 简单:Blowfish只使用基本运算,如加法、异或和表格查阅,因此很容易设计与实现。
 安全:Blowfish是变长密钥的,最长448位,使其既灵活又安全。
Blowfish适合密钥长期不变的情形(如通信链路加密),而不适合密钥经常更换的情形(如分组加密)。

2.操作

Blowfish用变长密钥加密64位块,分成如下两个部分:
(1)子密钥生成:这个过程将最长448位的密钥转换成总长为4168位的子密钥。
(2)数据加密:这个过程将简单函数迭代16次,每一轮包含密钥相关置换和密钥与数据相关替换。
2.1 子密钥生成
子密钥生成过程重要内容如下:
(1)Blowfish使用了大量的子密钥。在加密和解密操作之间就得准备好这些密钥。密钥的大小为32~ 448位。换句话说,密钥的大小为1~ 14个字,每个字由32位组成。这些密钥都存储在一个数组中:K1,K2,⋯,Kn,其中1≤n≤14。
(2)P数组是由18个32位的子密钥构成:P1,P2,⋯,P18。其创建过程将在下面介绍。
(3)4个S盒,每个含有256个32位的项:
S1,0,S1,1,⋯,S1,255
S2,0,S2,1,⋯,S2,255
S3,0,S3,1,⋯,S3,255
S4,0,S4,1,⋯,S4,255
S盒的创建将在下面介绍。
现在介绍如何使用这些信息来生成子密钥:
(1)首先初始化P数组,然后初始化4个S盒,建议使用常量π的小数部分(16进制的形式),于是有:
P1=243F6A88
P2=85A208D3

S4,254=578FDFE3
S4,255=3AC372E6
(2)P1与K1进行XOR运算,P2与K2进行XOR运算,一直到P18。这在P14与K14之前都是工作很好的,但之后密钥数组K用完了,因此P15~ P18,重复使用K1 ~K4,即如下进行:
P1=P1 XOR K1
P2=P2 XOR K2

P14=P14 XOR K14
P15=P15 XOR K1
P16=P16 XOR K2
P17=P17 XOR K3
P18=P18 XOR K4
(3)现在采用一个64位块,所有位都初始化为0。使用上面的P数组和S盒,在这个全为0的64位块上运行Blowfish加密过程。换句话说,要生成子密钥本身,需要使用Blowfish算法。
这一步将产生64位的密文,将这些分成两个32位的块,分别用着32位的块来替换P1和P2的初始值。
(4)使用Blowfish和修改后的子密钥,对(1)步的输出进行加密。输出结果同样由64位组成。像前面一样,把它分成两个32位的块,这两个密文块用P3和P4替换。
(5)可以用同样的方法一次替换P数组的其他部分(即P5~P18)以及4个S盒的所有元素。在每一步中,要把前一步的输出结果输入到Blowfish算法,以及生成下两个32位块(即P5与P6,然后是P7与P8,等等)
这里总共需要512次迭代来生成所有的P数组和S盒。
2.2 数据加密和解密
在加密和解密过程中都使用了P数组和S盒。对64位块的明文输入,其加密过程如下图所示:
在这里插入图片描述
由上图可知,将64位明文分成两个长度相同的部分,假设为XL和XR,前16轮作如下操作:
在这里插入图片描述
最后一轮,先Swap XL,XR ,即取消第16轮中的Swap XL,XR的交换,再 执行如下操作:
在这里插入图片描述
并将XL与XR合并得到密文。
函数F的功能如下:
(1)把32位的XL块分成4个8位的子块,分别命名为a、b、c和d。
(2)计算F[a,b,c,d]=((S1,a+S2,b) XOR S3,c)+S4,d。例如,如果a=10,b=95,c=37,d=191,那么F计算如下所示:
F[10,95,37,191]=((S1,10+S2,95) XOR S3,37)+S4,191
可以用下图显示函数F的功能:
**加粗样式**
解密过程很简单,使用的是P数组值的逆。其解密过程流程图如下图所示:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZhInen丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值