Получаются разные хеши на C и на C#.
На C:
UINT16 data1 = 88;
ULONG data2 = 74;
PBYTE hash;
DWORD len = 0, sz;
HCRYPTPROV hProv;
HCRYPTHASH hHash;
CryptAcquireContextA(
reinterpret_cast<HCRYPTPROV*>(&hProv),
NULL,
(LPSTR)MS_ENH_RSA_AES_PROV,
PROV_RSA_AES,
CRYPT_NEWKEYSET
);
CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash);
CryptHashData(hHash, (PBYTE)&data1, sizeof(UINT16), 0);
CryptHashData(hHash, (PBYTE)&data2, sizeof(ULONG), 0);
CryptGetHashParam(hHash, HP_HASHSIZE, (BYTE*)&len, &sz, 0);
hash = static_cast<PBYTE>(calloc(1, (size_t)len));
CryptGetHashParam(hHash, HP_HASHVAL, hash, &len, 0);
(проверки убрал для краткости)
На C#:
ushort data1 = 88;
UInt32 data2 = 74;
int sz = 0;
byte[] data = new byte[sizeof(UInt32) + sizeof(ushort)];
byte[] hash;
Array.Copy(
BitConverter.GetBytes(data1), 0, data, sz, sizeof(ushort)); sz += sizeof(ushort);
Array.Copy(
BitConverter.GetBytes(data2), 0, data, sz, sizeof(UInt32));
using (SHA256Managed hs = new SHA256Managed())
{
hash = hs.ComputeHash(data);
}
Проблемы на первый взгляд не видно, но результат разный.
Upd:
Вопрос решен, как всегда невнимательность :)
DWORD len = 0, sz = sizeof(DWORD);
C: 3a b1 88 5e eb 0b bf f4 cc 42 12 9c 21 09 25 73 64 45 db 52 55 9d 3a 23 40 be 15 2c 70 4b aa 2d
C#: 3A B1 88 5E EB 0B BF F4 CC 42 12 9C 21 09 25 73 64 45 DB 52 55 9D 3A 23 40 BE 15 2C 70 4B AA 2D
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости