Получаются разные хеши SHA256

173
12 мая 2019, 08:00

Получаются разные хеши на 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

READ ALSO
Как в одну форму вставить 2 действия

Как в одну форму вставить 2 действия

Есть одна форма регистрации с двумя типами клиентов, юридическое и физическое лицоВопрос в том,как их разграничить

215
Button submit без перезагрузки

Button submit без перезагрузки

решил создать простенький тест на php, может кто подсказать какой ajax код надо написать чтобы при нажатии на кнопку страничка не перезагружаласьВот...

356