【发布时间】:2014-03-20 18:01:05
【问题描述】:
我正在尝试在 MS Visual Studio 中使用 Crypto++ 实现 AES 256 算法。操作系统为 Windows 7(64 位)。
我需要以十六进制字符串的形式提供密钥,以字符串形式提供密码,最后我希望加密的字符串也是十六进制字符串。
这是我想要做的:
我的加密方法:
std::string encrypt(const std::string &password)
{
std::string plain = password;
std::string ciphertext;
char * decodedKey= "729308A8E815F6A46EB3A8AE6D5463CA7B64A0E2E11BC26A68106FC7697E727E37011";
byte key[ CryptoPP::AES::MAX_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ];
CryptoPP::StringSource( reinterpret_cast<const char *>(decodedKey), true,
new CryptoPP::HashFilter(*(new CryptoPP::SHA256), new CryptoPP::ArraySink(key, CryptoPP::AES::MAX_KEYLENGTH)) );
memset( iv, 0x00, CryptoPP::AES::BLOCKSIZE );
CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption Encryptor( key, sizeof(key), iv );
CryptoPP::StringSource( plain, true, new CryptoPP::StreamTransformationFilter( Encryptor,
new CryptoPP::HexEncoder(new CryptoPP::StringSink( ciphertext ) ) ) );
std::cout<<"Ciphertext:" << ciphertext;
return ciphertext;
}
从主方法
int main(int argc, char* argv[]) {
encrypt("test");
return 0;
}
目前我只是为了调试目的对密钥进行硬编码。我的密钥是十六进制字符串,如下所示。我需要将输出加密字符串作为十六进制字符串。
【问题讨论】:
-
抛开所有这些crypto++——你的终极问题是什么?是如何从一个字母字符串转换为每个字符十六进制字符串的两位数?
-
除了让它落入以太之外,尝试对函数的返回值做一些事情吗?
标签: c++ encryption crypto++