使用crypto++的HMAC解密明文
Decrypting plantext using HMAC of crypto++
我在使用 crypto++ 库的 HMAC 时遇到问题
我已经用这个 link 制作了一条加密消息 crypto++-HMAC,它工作正常
AutoSeededRandomPool prng;
SecByteBlock key(16);
prng.GenerateBlock(key, key.size());
string plain = "HMAC Test";
string mac, encoded;
// Pretty print key
encoded.clear();
StringSource ss1(key, key.size(), true,
new HexEncoder(
new StringSink(encoded)
) // HexEncoder
); // StringSource
cout << "key: " << encoded << endl;
cout << "plain text: " << plain << endl;
try
{
HMAC< SHA256 > hmac(key, key.size());
StringSource ss2(plain, true,
new HashFilter(hmac,
new StringSink(mac)
) // HashFilter
); // StringSource
}
catch(const CryptoPP::Exception& e)
{
cerr << e.what() << endl;
exit(1);
}
// Pretty print
encoded.clear();
StringSource ss3(mac, true,
new HexEncoder(
new StringSink(encoded)
) // HexEncoder
); // StringSource
cout << "hmac: " << encoded << endl;
现在在另一边我想解密这条消息并得到真正的纯文本
但我还没有得到任何结果。我已经检查了 link decode 的步骤,但它对我没有帮助。我不知道我应该在哪里使用Key?
请指导我找到解决方案
我了解到HMAC不是一种加密算法,而是一种编码算法。
其他人可以使用 HMAC 查看我们的消息,但他们无法向我们提供未经验证的消息。
并且所有消息字节都可以被编码用于发送,在接收部分我们用我们的密钥解码并检查消息的权限,消息的编码部分根据我们使用的散列函数(MD5,SHA1,SHA256)具有固定大小)
我在使用 crypto++ 库的 HMAC 时遇到问题
我已经用这个 link 制作了一条加密消息 crypto++-HMAC,它工作正常
AutoSeededRandomPool prng;
SecByteBlock key(16);
prng.GenerateBlock(key, key.size());
string plain = "HMAC Test";
string mac, encoded;
// Pretty print key
encoded.clear();
StringSource ss1(key, key.size(), true,
new HexEncoder(
new StringSink(encoded)
) // HexEncoder
); // StringSource
cout << "key: " << encoded << endl;
cout << "plain text: " << plain << endl;
try
{
HMAC< SHA256 > hmac(key, key.size());
StringSource ss2(plain, true,
new HashFilter(hmac,
new StringSink(mac)
) // HashFilter
); // StringSource
}
catch(const CryptoPP::Exception& e)
{
cerr << e.what() << endl;
exit(1);
}
// Pretty print
encoded.clear();
StringSource ss3(mac, true,
new HexEncoder(
new StringSink(encoded)
) // HexEncoder
); // StringSource
cout << "hmac: " << encoded << endl;
现在在另一边我想解密这条消息并得到真正的纯文本 但我还没有得到任何结果。我已经检查了 link decode 的步骤,但它对我没有帮助。我不知道我应该在哪里使用Key?
请指导我找到解决方案
我了解到HMAC不是一种加密算法,而是一种编码算法。
其他人可以使用 HMAC 查看我们的消息,但他们无法向我们提供未经验证的消息。
并且所有消息字节都可以被编码用于发送,在接收部分我们用我们的密钥解码并检查消息的权限,消息的编码部分根据我们使用的散列函数(MD5,SHA1,SHA256)具有固定大小)