C BlowFish對(duì)稱加密算法詳解
1.算法原理
BlowFish算法基于Feistel網(wǎng)絡(luò),加密函數(shù)迭代執(zhí)行16輪,分組長(zhǎng)度為64位,密鑰長(zhǎng)度可以從32位到448位。算法由兩部分組成,密鑰擴(kuò)展部分和數(shù)據(jù)加密部分,密鑰擴(kuò)展部分將最長(zhǎng)最長(zhǎng)為448位的密鑰轉(zhuǎn)化成共4168字節(jié)長(zhǎng)度的子密鑰數(shù)組,其中,數(shù)據(jù)加密由一個(gè)16輪的Feistel網(wǎng)絡(luò)完成,每輪由一個(gè)密鑰相關(guān)置換和一個(gè)密鑰與數(shù)據(jù)相關(guān)的替換組成。
(1)子密鑰
BlowFish算法子密鑰在加密前預(yù)計(jì)算產(chǎn)生。
P數(shù)組由18個(gè)32位字的子密鑰組成。P1,P2''''''.P18
4個(gè)8X32的包含總共1024個(gè)32位字的S-box.
子密鑰擴(kuò)展算法如下:
- 按順序使用常數(shù)π的小數(shù)部分初始化P數(shù)組和S-box
- 對(duì)P數(shù)組和密鑰進(jìn)行逐位異或,需要時(shí)重用密鑰。
- 使用當(dāng)前的P數(shù)組和S-box,對(duì)全0和64位分組使用BlowFish算法進(jìn)行加密,用輸出替代P1,p2,
- 使用當(dāng)前的P和S對(duì)第3步的輸出進(jìn)行加密,并輸出替代P3,P4
- 繼續(xù)上面的過(guò)程,直到按順序替代所用的P數(shù)組和S-Box中的元素。
2.加密代碼實(shí)現(xiàn)
BlowFish由16輪的Fistel網(wǎng)絡(luò)組成,輸入是一個(gè)64位的數(shù)據(jù)元素X,將X分成兩個(gè)32位部分,XL,XR,加密如下:
void Blowfish_encipher(unsigned long *xl, unsigned long *xr) { unsigned long Xl; unsigned long Xr; unsigned long temp; short i; Xl = *xl; Xr = *xr; for (i = 0; i < 16; ++i) { //16輪的 Xl = Xl ^ P[i]; Xr = F(Xl) ^ Xr; temp = Xl; Xl = Xr; Xr = temp; } temp = Xl; Xl = Xr; Xr = temp; Xr = Xr ^ P[N]; Xl = Xl ^ P[N + 1]; *xl = Xl; *xr = Xr; }
ANALYZER通過(guò)檢測(cè)4個(gè)8X32的包含總共1024個(gè)32位字的S-box.但通過(guò)動(dòng)態(tài)讀取方式時(shí),較難識(shí)別。
到此這篇關(guān)于C BlowFish對(duì)稱加密算法詳解的文章就介紹到這了,更多相關(guān)C BlowFish對(duì)稱加密內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的SOAP客戶端
這篇文章主要介紹了C++實(shí)現(xiàn)一個(gè)簡(jiǎn)單的SOAP客戶端,在C++中,一般使用gSOAP來(lái)實(shí)現(xiàn)客戶端、服務(wù)端,下面一起進(jìn)入文章了解具體內(nèi)容,需要的朋友可以參考一下2021-11-11C語(yǔ)言利用cJSON解析JSON格式全過(guò)程
cJSON是用于解析json格式字符串的一套api,非常好用,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言利用cJSON解析JSON格式的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04C語(yǔ)言實(shí)現(xiàn)三子棋實(shí)例代碼
大家好,本篇文章主要講的是C語(yǔ)言實(shí)現(xiàn)三子棋實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01C++ 基礎(chǔ)編程之十進(jìn)制轉(zhuǎn)換為任意進(jìn)制及操作符重載
這篇文章主要介紹了C++ 基礎(chǔ)編程之十進(jìn)制轉(zhuǎn)換為任意進(jìn)制及操作符重載的相關(guān)資料,需要的朋友可以參考下2017-02-02Qt實(shí)現(xiàn)模糊匹配功能的實(shí)例詳解
對(duì)于瀏覽器的使用,我想大家一定不會(huì)陌生吧,輸入要搜索的內(nèi)容時(shí),會(huì)出現(xiàn)相應(yīng)的匹配信息。本文就來(lái)用Qt實(shí)現(xiàn)模糊匹配功能,感興趣的可以了解一下2022-10-10C語(yǔ)言中的函數(shù)指針學(xué)習(xí)筆記
這篇文章主要介紹了C語(yǔ)言中的函數(shù)指針的一些學(xué)習(xí)知識(shí)點(diǎn)記錄,文中作者整理了一些比較interesting的函數(shù)指針用法,需要的朋友可以參考下2016-04-04利用C語(yǔ)言實(shí)現(xiàn)經(jīng)典游戲斗獸棋
《斗獸棋》是一款棋類游戲,整個(gè)游戲畫面是分為兩塊區(qū)域,中間有河流分割兩塊區(qū)域,有橋梁可以讓彼此的動(dòng)物過(guò)河,要取得勝利,必須占領(lǐng)那一邊動(dòng)物的巢穴獲勝利。本文將用C語(yǔ)言實(shí)現(xiàn)這一游戲,需要的可以參考一下2022-03-03C++ TensorflowLite模型驗(yàn)證的過(guò)程詳解
這篇文章給大家介紹了C++ TensorflowLite模型驗(yàn)證的過(guò)程,測(cè)試代碼,主要是RunInference()和read_file(),詳細(xì)操作過(guò)程跟隨小編一起看看吧2021-08-08