我有一架SHA1型散射机,我需要签署。 采用CryptSignHash(CryptSignHash())法,需要一个HCRYPTHLM来签字。 我创立了这一机制,而且由于我已经设定了实际的散射价值:
CryptCreateHash(cryptoProvider, CALG_SHA1, 0, 0, &hash);
CryptSetHashParam(hash, HP_HASHVAL, hashBytes, 0);
has有20个 by。
然而,问题在于,由这一HCRYPTHLM操作的签字是不正确的。 我发现,问题在于,消费物价指数实际上没有使用我洗tes阵阵列的所有20个tes。 出于某种原因,它认为,SHA1只是4个 by。
我写了这个小方案:
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
", hashLength);
而这种印本是 has:4 !
任何人都能够解释我正在做的错事,或者为什么微软消费物价指数认为SHA1是4个 by子(32个比方),而不是20个 by子(160个比方)。