如何使用AES加SHA256哈希作为密钥crypto ++
答
我最终以下面的代码达到了预期的效果。
QString qhash = "hash";
std::string plain = "message";
std::string ciphertext;
std::string stdhash = qhash.toStdString();
CryptoPP::HexDecoder decoder;
decoder.Put((byte*)stdhash.data(),qhash.size());
decoder.MessageEnd();
CryptoPP::word64 size = decoder.MaxRetrievable();
char *decodedKey = new char[size];
decoder.Get((byte *)decodedKey, size);
byte hash[CryptoPP::AES::MAX_KEYLENGTH], iv[ CryptoPP::AES::BLOCKSIZE ];
CryptoPP::StringSource(reinterpret_cast<const char *>(decodedKey), true,new CryptoPP::ArraySink(hash, CryptoPP::AES::MAX_KEYLENGTH));
memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE);
CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption Encryptor(hash,sizeof(hash),iv);
CryptoPP::StringSource(plain, true, new CryptoPP::StreamTransformationFilter(Encryptor, new CryptoPP::HexEncoder(new CryptoPP::StringSink(ciphertext))));
return ciphertext;
您可能应该阅读加密的基础知识。 _你是如何创建你的密钥无关紧要的。 SHA256是一种红鲱鱼。 – MSalters
@ MSalters好的,谢谢,我对CBC模式下的AES工作原理有了一个基本的了解,但我只是解释了我是如何做出这个关键的,但我明白这并不重要。 – spies9149
为什么要散列一个你想用作键的字符串?为什么不使用适当的密钥派生方案? –