我想保護我的數據,所以我嘗試用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