2011-09-20 7 views
1

이 클래스는 MSVC++ 2010 Express : http://www.codeproject.com/KB/recipes/HMACSHA1class.aspx에서 사용하고 있습니다. 나는 Vista 32 비트를 실행 중이다. "오류 C3861 :이 때문에이 말을 그대로2 바이트 씩 HMACSHA1 해제

fIn = fopen(szFileName, "rb"); 

fIn = fopen_s(szFileName, "rb"); 

로 : ... 그것은 그냥 변경 작업

SHA1.cpp를 얻을 꽤 많이 '는 fopen' : 식별자를 찾을 수 없습니다 ".

내가 INT 주에서 사용되는 코드는 다음과 같습니다

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

이 실제 해시 생성에 문제처럼 보이지만 오히려 출력 코드를하지 않습니다

아마이 문제를 해결합니다. 나는 C++ 스트림 API에 익숙하지 않지만'0'을 생략하고 있기 때문에 각 바이트를 하나 또는 두 개의 char 16 진수 문자열로 출력 할 것이고'0'을 생략 할 것입니다. – CodesInChaos

답변

4

다이제스트의 일부 바이트 값이 <인데 이는 한 문자 만 쓰여졌 음을 의미합니다.

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

아. 정말 고마워. :-) – user954753