gpt4 book ai didi

c++ - 执行 AES 解密后字符串末尾的 Crypto++ 和垃圾

转载 作者:太空狗 更新时间:2023-10-29 22:55:28 27 4
gpt4 key购买 nike

我正在将 Crypto++ 集成到我的 C++ 应用程序中,到目前为止它几乎可以正常工作。

加密工作完美。输出符合我的预期。但是,当我去解密时,它在末尾添加了方 block 字符。

这是我的加密函数:

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;

这是输出: enter image description here

当我将输出复制并粘贴到 Notepad++ 中时,它是一堆空格。我感觉它与 ZEROS_PADDING 打交道,但我需要它与我们正在使用的其他应用程序相匹配。

我不确定如何实际尝试解决此问题。想法?

最佳答案

根据评论,我能够弄清楚字符串末尾的内容。我知道它必须处理零填充,但由于是 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());

关于c++ - 执行 AES 解密后字符串末尾的 Crypto++ 和垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52006356/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com