我正在将Crypto ++集成到我的C ++应用程序中,到目前为止,它几乎可以正常工作。
加密工作完美。输出符合我的期望。但是,当我解密时,它会在末尾添加方形字符。
这是我的加密功能:
string Encryption::EncryptAES(const string &text, const string &key) {
string cipher;
AES::Encryption aes((byte *) key.c_str(), 32);
ECB_Mode_ExternalCipher::Encryption ecb(aes);
StreamTransformationFilter encrypt(ecb, new StringSink(cipher), StreamTransformationFilter::ZEROS_PADDING);
encrypt.Put(reinterpret_cast<const unsigned char *>( text.c_str()), text.length() + 1);
encrypt.MessageEnd();
return Base64::Encode(cipher);
}
这是我的解密功能:
string Encryption::DecryptAES(const string &text, const string &key) {
string decoded;
Base64::Decode(text, decoded);
string decrypted;
AES::Decryption aes((byte *) key.c_str(), 32);
ECB_Mode_ExternalCipher::Decryption ecb(aes);
StreamTransformationFilter decrypt(ecb, new StringSink(decrypted), StreamTransformationFilter::ZEROS_PADDING);
decrypt.Put(reinterpret_cast<const unsigned char *>( decoded.c_str()), decoded.length());
decrypt.MessageEnd();
return decrypted;
}
我将以下内容用于Base64编码/解码: Base64 Encode/Decode
这是我调用的用于加密/解密的代码:
string encryptedPass = EncryptAES(value, key);
cout << "Encrypted Text: " << encryptedPass << endl;
string decryptedPass = DecryptAES(encryptedPass, key);
cout << "Decryped Text: " << decryptedPass << endl;
当我将输出复制并粘贴到Notepad ++中时,会有很多空格。我觉得它可以处理ZEROS_PADDING
,但是我需要在其中匹配我们正在使用的其他应用程序。
我不确定如何实际尝试解决此问题。有想法吗?
答案 0 :(得分:1)
基于注释,我能够弄清楚字符串末尾是什么。我知道它必须处理零填充,但是由于是C ++的新功能,所以我不完全了解发生了什么。
我运行它来获取字符的ascii值:
for(char& c : s){
cout << "Char:" << (int)c << endl;
}
这导致在字符串末尾出现以下内容:
Char:0
Char:0
Char:0
Char:0
Char:0
Char:0
根据ASCII表,它是NUL
因此,简单的解决方案是:
std::string(value.c_str());