我在MSVC ++ 2010 Express中使用此类:http://www.codeproject.com/KB/recipes/HMACSHA1class.aspx。我正在运行Vista 32bit。几乎让它工作我只是改变了......
SHA1.cpp:
fIn = fopen(szFileName, "rb");
到
fIn = fopen_s(szFileName, "rb");
因为没有这个改变就会说:“错误C3861:'fopen':找不到标识符”。
我在int main中使用的代码是:
BYTE Key[20] ;
BYTE digest[20] ;
unsigned char test[] = "Hi There" ;
memset(Key, 0x0b, 20) ;
CHMAC_SHA1 HMAC_SHA1 ;
HMAC_SHA1.HMAC_SHA1(test, strlen((const char *)test), Key, sizeof(Key), digest) ;
for(int i=0;i<sizeof(digest);i++)
std::cout << hex << (int)digest[i];
int a;
std::cin >> a;
// Check with digest equal to 0xb617318655057264e28bc0b6fb378c8ef146be00
// or not
问题是我的摘要等于:0xb61731865557264e28bc0b6fb378c8ef146be0,它假设等于0xb617318655057264e28bc0b6fb378c8ef146be00。任何有关此代码错误以及如何使其工作的帮助都会有很多帮助......
也许有人可以指出我正确的方向,以获得更好的HMACSHA1课程。 win32的CryptoAPI是复杂而愚蠢的。
答案 0 :(得分:4)
我想这是因为摘要中的某些字节值是&lt; 10表示只写一个字符。
也许这解决了你的问题:
for(int i=0;i<sizeof(digest);i++)
std::cout << setfill('0') << setw(2) << hex << (int)digest[i];