雜湊演算法之whirlpool演算法 C 實現

2022-09-03 05:36:07 字數 1986 閱讀 9399

一,whirlpool演算法介紹

whirlpool演算法用於生成訊息摘要。

該演算法輸入長度小於2^256位,輸出長度為512位。分組長度為512位,預留的明文長度填充為256位。

該演算法使用512位的金鑰,參考了分組密碼的思路,使用輪函式加迭代,演算法結構與aes相似。

二,填充說明

若分組不夠512bit,則進行填充。第一位填充1,其餘位填充0,最後剩餘256位填充明文的長度。

若分組不夠512bit,但超過256bit,則需再擴充512bit以便填入明文長度。

三,**實現

1 #include2

using

namespace

std;

3 vector x;//

8*64=512,每個下標存放8位

4int turn;//

加密分組數量

5int a[64],b[64],k[64],ciph[64];//

k為金鑰

6int subk[11][64]; //

11個輪金鑰

7int s[256]=;

41int c[64]=;

51void printx() 60}

6162

void printc(int t[64])

6566

文字的填充處理

67 turn = (m.size() + 32) / 64 + 1;//

32*8=256為填充長度的預留位

68 x.resize(turn * 64); //

turn為分組數 一組512bit 為64個十六進製制

69int i = 0;70

for (; i < m.size(); i++)

73 x[i++] = 0x80;74

while (i < x.size() - 32

) 78

long

long

int a = m.size() * 8; //

明文長度

79for (i = x.size() - 1; i >= x.size() - 32; i--) 83}

8485

當金鑰位數不夠時用0擴充

86if(m.size()>63)90

int i=0;91

for(;im[i];

92for(;i<64;i++) k[i]=0;93

}9495void r_transform(int a[64],int b[64])

99100

void column_transform(int a[64],int b[64])

104 memcpy(a,b,sizeof(int)*64

);105

}106

107void row_mixture(int a[64],int b[64])

114 memcpy(a,b,sizeof(int)*64

);115

}116

117void add_subkey(int n,int a[64],int b[64])

121122

void one_round(int n,int a[64],int b[64])

128129

void create_subkey()

138 one_round(r-1

,con,subk[r]);

139}

140}

141142

intmain()

160 cout<

密文為:

"<

161 printc(ciph); //

輸出密文

162return0;

163 }

四,實現截圖

演算法之雜湊演算法

將任意長度的二進位制值串對映為固定長度的二進位制值串,這個對映的規則就是雜湊演算法。安全加密 安全加密主要利用雜湊演算法單向的特點。我們可以對要儲存的密碼進行雜湊演算法加密,這樣就算被攻擊且洩漏了資料庫資料,那麼別人也無法反向推導出密碼明文。唯一標識 唯一標識主要利用雜湊演算法的雜湊衝突非常小的特點...

演算法之雜湊

雜湊演算法歷史悠久,業界著名的雜湊演算法也有很多,比如 md5 sha 等。在開發中,基本上都是拿現成的直接用。不管是 雜湊 還是 雜湊 這都是中文翻譯的差別,英文其實就是 hash 雜湊演算法的定義 任意長度的二進位制值串對映為固定長度的二進位制值串,這個對映的規則就是雜湊演算法,而通過原始資料對...

Android資料加密之SHA安全雜湊演算法

對於sha安全雜湊演算法,以前沒怎麼使用過,僅僅是停留在聽說過的階段,今天在看快取框架glide原始碼時發現其快取的key採用的不是md5加密演算法,而是sha 256加密演算法,這才勾起了我的好奇心,所以趁著晚上沒啥事,來學習一下。其他幾種加密方式 sha secure hash algorith...