Как рассчитать HMAC SHA в Windows? - PullRequest
0 голосов
/ 06 августа 2011

Мне нужно рассчитать HMAC SHA в моей программе на Windows. Ранее эта программа работала в Linux, где использовалась openssl. Теперь мне нужно перенести его на Windows, но я не уверен, что SDK платформы Windows предоставляет какие-либо средства для расчета HMAC SHA.

Я перехожу по следующей ссылке на MSDN, но я не уверен - http://msdn.microsoft.com/en-us/library/aa382453(v=VS.85).aspx.

Дайте мне знать, что для меня лучше. Существующая программа находится на C.

Ответы [ 3 ]

2 голосов
/ 06 августа 2011

Если у вас есть ключ явно, может быть проще запрограммировать HMAC явно из двух вызовов примитива SHA, чем пытаться сделать ключ известным Windows Crypto API.Сам HMAC указан в RFC 2104, и Windows может сделать для вас хэши SHA с помощью CryptCreateHash, CryptHashData и CryptGetHashParam.

2 голосов
/ 03 сентября 2015

Вы можете использовать CryptImportKey, чтобы получить ключ в Windows Cryptographic Service Provider. Затем следуйте примеру MSDN, код HMAC . Хитрость для получения вашего ключа в CSP состоит в том, чтобы создать структуру для хранения 3 вещей: BLOBHEADER, DWORD для длины и char [] для ключа. Я предполагаю, что у вас есть необработанные ключевые данные, чтобы они выглядели примерно так:

struct KeyData
{
  BLOBHEADER hdr;
  unsigned long keyLength;
  unsigned char key[128];
};

void ComputeHash()
{
  HCRYPTPROV cryptoProvider = 0;
  HCRYPTKEY cryptKey = 0;
  KeyData kd;
  kd.hdr.aiKeyAlg = CALG_RC2;
  kd.hdr.bType = PLAINTEXTKEYBLOB;
  kd.hdr.bVersion = CUR_BLOB_VERSION;
  kd.hdr.reserved = 0;
  kd.keyLength = 128;
  /* set your key data here */
  /* get a crypto provider - See the microsoft references */
  CryptImportKey(cryptoProvider, reinterpret_cast<BYTE*>(&kd), sizeof(kd),0, CRYPT_IPSEC_HMAC_KEY, &cryptKey);
  /* use cryptKey in the call to CryptCreateHash when you create your CALG_HMAC */
}

Обязательно замените длину на фактическую длину вашего ключа.

0 голосов
/ 06 августа 2011

Если вы хотите использовать API, включенный в ОС, то найденная ссылка в порядке - дополнительную информацию см. http://msdn.microsoft.com/en-us/library/aa380255%28v=vs.85%29.aspx

Или вы ищете стороннюю библиотеку с некоторыми специфическими функциями?если вы уже знакомы с openssl, он также доступен для Windows ... см. http://www.slproweb.com/products/Win32OpenSSL.html

...