我想保护我的数据,所以我尝试用XXTEA加密它。我这样做的方法:Base64编码XXTEA加密字符串错误
- inputString - > XXTEA加密 - > outputString
- outputString - > XXTEA解密 - > inputString
一切都是加密和解密确定。但是,当我试图让一个base64编码后输出XXTEA对其进行加密和BASE64 XXTEA解密之前对其进行解码,结果是错误的:
- 输入 - > XXTEA加密 - >使用Base64编码 - >输出
- 输出 - >的base64解码! - > XXTEA解密=输入
当我与http://www.tools4noobs.com/online_tools/xxtea_encrypt/和http://www.tools4noobs.com/online_tools/xxtea_decrypt/测试
我的例子的输入字符串为hello
其最终的结果是bjz/S2f3Xkxr08hu
但是,当我用我的代码(见下文)进行测试,最后的结果是bjz/Sw==
这是我encryption code
:
std::string ProjectUtils::encrypt_data_xxtea(std::string input, std::string secret) {
//Encrypt with XXTEA
xxtea_long retLength = 0;
unsigned char data[input.length()];
strncpy((char*)data, input.c_str(), sizeof(data));
xxtea_long dataLength = (xxtea_long) sizeof(data);
unsigned char key[secret.length()];
strncpy((char*)key, secret.c_str(), sizeof(key));
xxtea_long keyLength = (xxtea_long) sizeof(key);
unsigned char *encryptedData = xxtea_encrypt(data, dataLength, key, keyLength, &retLength);
//Encode base64
char* out = NULL;
base64Encode(encryptedData, sizeof(encryptedData), &out);
CCLOG("xxtea encrypted data: %s", out);
return out;
}
这里是我的decryption code
:
char* ProjectUtils::decrypt_data_xxtea(std::string input, std::string secret) {
//Decode base64
unsigned char* output = NULL;
base64Decode((unsigned char*)input.c_str(), (unsigned int)strlen(input.c_str()), &output);
xxtea_long dataLength = (xxtea_long) sizeof(output);
xxtea_long retLength = 0;
unsigned char key[secret.length()];
strncpy((char*)key, secret.c_str(), sizeof(key));
xxtea_long keyLength = (xxtea_long) sizeof(key);
//Decrypt with XXTEA
char *decryptedData = reinterpret_cast<char*>(xxtea_decrypt(output, dataLength, key, keyLength, &retLength));
CCLOG("xxtea decrypted data: %s", decryptedData);
return decryptedData;
}
你知道我的代码有什么问题吗?任何帮助,将不胜感激! 非常感谢。
我使用xxtea对base64进行编码后进行编码,因为使用xxtea进行加密的结果具有特殊字符,如**©\ \ \ 327_1xA \ 344R **,我无法将其保存到userdefault中。有什么办法将一个字符串转换为正常格式的特殊字符? – 2015-03-20 08:47:00