Blowfish算法中子密钥是如何生成的?
Blowfish是一种对称分组密码算法,由布鲁斯·施奈尔于1993年12月发明。Blowfish是DES或IDEA的替代方案。Blowfish是最流行的Feistel网络密码之一。Blowfish算法具有64位块大小和可变密钥长度(从42位到448位)。该算法包括密钥扩展部分和数据加密部分。
Blowfish将最多448位的密钥创建为多个子密钥数组,总共1042个32位值或4168字节。它是一个16轮Feistel系统,支持非常高的密钥相关S盒并启用16次迭代。
每一轮都使用密钥和数据相关的替换以及密钥相关的置换进行调整。32位字和XOR运算通过加法实现。有一个P数组和四个32位的S盒。
P数组包含18个32位的子密钥,而每个S盒包含256个条目。输入是一个64位数据元素。子密钥生成的流程如下:
Blowfish使用了大量的子密钥。这些密钥必须在加密和解密出现之前准备好。密钥大小字段从32位到448位。换句话说,密钥大小范围从1到14个字,每个字包含一个32位的字。这些密钥按如下方式保存在数组中:
K1、K2、…、Kn,其中1 ≤ n ≤ 14
包含18个32位子密钥的P数组的概念:
P1、P2、……、P18。
P数组的创建将在后面描述。
有四个32位S盒,每个包含256个条目:
S1, 0、S1, 1… S1, 255
S2, 0、S2, 1… S2, 255
S3, 0、S3, 1… S3, 255
S4, 0、S4, 1… S4, 255
P数组的创建将在后面定义。
可以先初始化P数组,然后初始化四个S盒,使用一个固定的字符串。
P数组和四个S盒表示为Pi的十六进制数字。
可以实现P数组和K数组的按位XOR运算,重复使用密钥位所需的K数组中的字(即,P1 XOR(密钥的32位),P2 XOR(密钥的32位)。
可以加密64位块,并使用以下加密过程来使用通用的P和S数组加密全零数据。
可以使用加密的输出替换p1和p2,新的输出称为p1和p2。
可以使用当前的P盒和S盒加密步骤3的输出,并使用加密后的文本替换p3和p4,新的输出称为p3和p4。
可以重复以下步骤,直到获取P数组的所有元素,即P1、P2。
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP