HMACSHA1 выключен на 2 байта - PullRequest
       69

HMACSHA1 выключен на 2 байта

1 голос
/ 20 сентября 2011

Я использую этот класс в 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. CryptoAPI для win32 является сложным и глупым.

1 Ответ

4 голосов
/ 20 сентября 2011

Я думаю, это потому, что некоторые байтовые значения в дайджесте <10, что означает, что записан только один символ. </p>

Возможно, это решит вашу проблему:

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