我想在我的C++項目中實現OAuth 1.0
協議。爲了創建OAuth簽名,我需要實現HMAC-SHA1
算法,其中key
和text
將根據OAuth規範創建一些字符串。如何在HMAC-SHA1 Crypto ++實現中使用自定義密鑰
我想使用Crypto ++庫來實現HMAC-SHA1。我發現項目的維基這個HMAC-SHA1例如:
AutoSeededRandomPool prng;
SecByteBlock key(16);
prng.GenerateBlock(key, key.size());
string plain = "HMAC Test";
string mac, encoded;
/*********************************\
\*********************************/
// Pretty print key
encoded.clear();
StringSource(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(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(mac, true,
new HexEncoder(
new StringSink(encoded)
) // HexEncoder
); // StringSource
cout << "hmac: " << encoded << endl;
但我不知道如何隨機生成的字符串,而不是我的創造key
使用。我嘗試過創建:
string key=...; //string generated by OAuth specification;
但隨後出現編譯錯誤。但是當我寫:
string plain=...; //string generated by OAuth specification;
然後沒有錯誤。
我需要指定什麼密鑰長度?因爲我將有不同長度的鍵(有48個,也許有96個符號)。