最近因为项目需要使用简单的加密算法,是加密后的密文保存在本地,于是上网找了比较应用广泛的xxtea,本是c++项目但是没有找到对应版本的xxtea,只能用c版本的进行开发。
TEA算法每一次可以操作64bit(8byte),采用128bit(16byte)作为key,算法采用迭代的形式,推荐的迭代轮数是64轮,最少32轮。为解决TEA算法密钥表攻击的问题,TEA算法先后经历了几次改进,从XTEA到BLOCK TEA,直至最新的XXTEA。XTEA也称做TEAN,它使用与TEA相同的简单运算,但四个子密钥采取不正规的方式进行混合以阻止密钥表攻击。最后输出为base64_encode代码。
简单说下用法
unsigned char encrypt_data = xxtea_encrypt(key, strlen(key), text, &len);
在这里text为用户名,key为密码。生成的encrypt_data即可当做秘钥进行保存。
其中由于c的void * 和 char 可以不进行安全检查进行转换,而c++是禁止这样的,所以需要加上主动类型转换即(char*)
char *decrypt_data = xxtea_decrypt(encrypt_data, len, key, &len);
在这里可以用xxtea_decrypt进行对本地保存的秘钥encrypt_data进行解密,和用户输入的密码进行对比。