最近因?yàn)轫?xiàng)目需要使用簡(jiǎn)單的加密算法,是加密后的密文保存在本地,于是上網(wǎng)找了比較應(yīng)用廣泛的xxtea,本是c++項(xiàng)目但是沒(méi)有找到對(duì)應(yīng)版本的xxtea,只能用c版本的進(jìn)行開(kāi)發(fā)。
TEA算法每一次可以操作64bit(8byte),采用128bit(16byte)作為key,算法采用迭代的形式,推薦的迭代輪數(shù)是64輪,最少32輪。為解決TEA算法密鑰表攻擊的問(wèn)題,TEA算法先后經(jīng)歷了幾次改進(jìn),從XTEA到BLOCK TEA,直至最新的XXTEA。XTEA也稱做TEAN,它使用與TEA相同的簡(jiǎn)單運(yùn)算,但四個(gè)子密鑰采取不正規(guī)的方式進(jìn)行混合以阻止密鑰表攻擊。最后輸出為base64_encode代碼。
簡(jiǎn)單說(shuō)下用法
unsigned char encrypt_data = xxtea_encrypt(key, strlen(key), text, &len);
在這里text為用戶名,key為密碼。生成的encrypt_data即可當(dāng)做秘鑰進(jìn)行保存。
其中由于c的void * 和 char 可以不進(jìn)行安全檢查進(jìn)行轉(zhuǎn)換,而c++是禁止這樣的,所以需要加上主動(dòng)類型轉(zhuǎn)換即(char*)
char *decrypt_data = xxtea_decrypt(encrypt_data, len, key, &len);
在這里可以用xxtea_decrypt進(jìn)行對(duì)本地保存的秘鑰encrypt_data進(jìn)行解密,和用戶輸入的密碼進(jìn)行對(duì)比。