一,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...