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