Blowfish演算法的操作是什麼?
Blowfish是一種對稱分組密碼演算法,它一次加密64位的資料塊。它遵循Feistel網路,其工作過程分為兩個部分。
子金鑰生成 - 此過程將長度最長為448位的金鑰轉換為子金鑰,總共新增4168位。
資料加密 - 在資料加密過程中,它將迭代16次網路。每一輪都包括金鑰相關的置換和金鑰和資料相關的替換。演算法中的運算是在32位字上進行的異或或加法運算。唯一的額外運算是在每一輪中進行四次索引陣列資訊查詢。
讓我們討論這兩個部分:
子金鑰生成 - Blowfish密碼演算法使用大量的子金鑰。這些金鑰在任何資料加密或解密之前都會生成。
P陣列包含18個32位子金鑰:
P1,P2,………….,P18。
有四個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陣列和四個S盒,該字串還包含π的十六進位制數字。
P1=0x243f6a88, P2=0x85a308d3, P3=0x13198a2e, P4=0x3707344,等等。
將P1與金鑰的前32位進行異或運算,將P2與金鑰的第二32位進行異或運算,依此類推,直到金鑰的所有位(最多可達P14)。重複此過程,直到整個P陣列都與金鑰位進行了異或運算。(對於每個短金鑰,都存在部分等效的長金鑰。例如,如果A是64位金鑰,則AA、AAA等都是相同的金鑰。)
可以使用步驟1和步驟2中定義的子金鑰,使用Blowfish演算法加密全零字串。
可以使用步驟(3)的64位輸出恢復P1和P2。
可以使用修改後的子金鑰,使用該演算法加密步驟(3)的輸出。
可以使用步驟(5)的輸出恢復P3和P4。
可以使用此過程繼續,使用不斷變化的演算法的輸出恢復P陣列的所有條目,然後按順序恢復所有四個S盒。
總共需要521次迭代才能生成所有所需的子金鑰。應用程式可以儲存子金鑰,而不是多次執行此推導過程。
資料加密 - Blowfish是一個包含16輪的Feistel網路。
輸入是64位資料元素x。
將x分成兩個32位半部分:xL, xR。
然後,對於i = 1到16;
xL = xL XOR Pi
xR = F(xL) XOR xR
交換xL和xR
第16輪之後,再次交換xL和xR以撤消最後一次交換。
然後,密文 = xL和xR的連線,xR = xR XOR P17 和 xL = xL XOR P18。
最後,重新組合xL和xR以獲得密文。解密與加密相同,只是P1、P2……P18按相反順序使用。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP