c++ - 如何使用 Crypto++ 在 C++ 中解密字符串数据,其中使用 pyCrypto 在 Python 中加密的原始字符串

标签 c++ python crypto++ pycrypto

我刚刚用 pyCrypto 轻松加密了一个数据字符串,但不知道如何用 crypto++ 解密它。任何人都可以使用 crypto++ 在 C++ 中提供示例解密代码吗? 这是我的 Python 代码:

key = '0123456789abcdef' 
data = "aaaaaaaaaaaaaaaa" 
iv = ''.join(chr(random.randint(0, 0xFF)) for i in range(16)) 
encryptor = AES.new(key, AES.MODE_CBC, iv) 
enc = encryptor.encrypt(data)

最佳答案

与@Jon 相同的方法,有点简化

std::string ciphertext = "..."; // what Python encryption produces
std::string decryptedtext;

byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];

// populate key and iv with the correct values

CryptoPP::CBC_Mode< CryptoPP::AES >::Decryption decryptor;
decryptor.SetKeyWithIV(key, sizeof(key), iv);


CryptoPP::StringSource(ciphertext, true,
        new CryptoPP::StreamTransformationFilter( decryptor,
            new CryptoPP::StringSink( decryptedtext )
        )
);

CryptoPP::StringSourcetrue 参数表示“消耗整个输入”

请注意(显然)您需要您的 C++ 解密器知道您用于加密的 IV。由于您在 Python 中生成随机 IV,因此流行的技术是将 IV 附加到加密文本。

关于c++ - 如何使用 Crypto++ 在 C++ 中解密字符串数据,其中使用 pyCrypto 在 Python 中加密的原始字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4593793/

相关文章:

python - django 中的 get_user_model() 、settings.AUTH_USER_MODEL 和 USER 有什么区别?

c++ - 仅在 Crypto++ 中进行 AES 解密

cryptography - 安全字符串接收器

c++ - 虚拟析构函数有什么用?

c++ - 如何使用 boost::asio 即时更改串行端口速度(或如何确定硬件缓冲区是否为空)?

android - QTcpServer - Android 上不支持的套接字操作

Python无法读取环境变量

python - 通过声音的相似性来确定弦之间的距离

c++ - 带有 GunZip 的 AES/GCM,无法正确解压

c++ - XCode 附加进程/分离进程(以编程方式分离调试器)