SHA1 해시가 있으며 서명해야합니다. CryptSignHash() 메서드는 서명을 위해 HCRYPTHASH 핸들이 필요합니다. 생성하고 실제 해시 값을 이미 설정 했으므로 다음과 같이 설정하십시오.SHA1을 Microsoft CAPI와 함께 사용
CryptCreateHash(cryptoProvider, CALG_SHA1, 0, 0, &hash);
CryptSetHashParam(hash, HP_HASHVAL, hashBytes, 0);
hashBytes는 20 바이트의 배열입니다.
그러나이 HCRYPTHASH 핸들에서 생성 된 서명이 올바르지 않은 것이 문제입니다. 문제를 추적하여 CAPI가 실제로 hashBytes 배열의 20 바이트를 모두 사용하지 않는다는 사실을 확인했습니다. 어떤 이유로 SHA1은 단지 4 바이트라고 생각합니다.
HCRYPTPROV cryptoProvider;
CryptAcquireContext(&cryptoProvider, NULL, NULL, PROV_RSA_FULL, 0);
HCRYPTHASH hash;
HCRYPTKEY keyForHash;
CryptCreateHash(cryptoProvider, CALG_SHA1, keyForHash, 0, &hash);
DWORD hashLength;
CryptGetHashParam(hash, HP_HASHSIZE, NULL, &hashLength, 0);
printf("hashLength: %d\n", hashLength);
그리고이 hashLength 출력한다 : 4
내가이 작은 프로그램을 작성이를 확인하세요!
누구나 내가 뭘 잘못하고 있는지 설명하거나 Microsoft CAPI가 SHA1이 20 바이트 (160 비트) 대신 4 바이트 (32 비트)라고 생각하는 이유를 설명 할 수 있습니까?