HMACSHA1关闭2个字节

HMACSHA1 off by 2 bytes

本文关键字:字节 2个 关闭 HMACSHA1      更新时间:2023-10-16

我在msvc++ 2010 Express中使用这个类:http://www.codeproject.com/KB/recipes/HMACSHA1class.aspx。我运行的是32位Vista。为了让它工作,我只是改变了…

SHA1.cpp:

fIn = fopen(szFileName, "rb");

fIn = fopen_s(szFileName, "rb");

因为如果没有这个更改,它会说:"error C3861: 'fopen': identifier not found"。

我在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太复杂和愚蠢了

我猜这是因为文摘中的一些字节值是<10表示只写一个字符。

也许这能解决你的问题:

for(int i=0;i<sizeof(digest);i++)
    std::cout << setfill('0') << setw(2) << hex << (int)digest[i];