Benim C++ uygulamasının şu anda OpenSSL tarafından yapıldığı MD5 hash değerini hesaplaması gerekiyor ve WinAPI'yi kullanmak için onu taşımak istiyorum - dış kütüphanelerde bağımlılığı önlemek için.Compute MD5 hash değeri C++ ile WinAPI
HCRYPTPROV hCryptProv = NULL;
HCRYPTHASH hHash = NULL;
HCRYPTHASH hHexHash = NULL;
HASH HA1;
HASHHEX HA1HEX;
DWORD data = HASHLEN;
// Get a handle to a cryptography provider context.
if(!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, 0))
{
goto err;
}
// Acquire a hash object handle.
if(!CryptCreateHash(hCryptProv, CALG_MD5, 0, 0, &hHash))
{
goto err;
}
CryptHashData(hHash, (const BYTE *)str, strlen(str), 0);
şimdi, tuhaf bir şey somtimes iyi çalıştığını ancak diğer zamanlarda hata NTE_BAD_KEYSET ile CryptAcquireContext dönüş göre bu MSDN:
Bu kodu yazdım
anahtar konteyner yapamadım açılmak Bu hatanın yaygın bir nedeni, anahtar kabın mevcut olmamasıdır. Anahtar kapsayıcı oluşturmak için CRYPT_NEWKEYSET bayrağını kullanarak CryptAcquireContext öğesini çağırın. Bu hata kodu, mevcut bir anahtar kabına erişimin reddedildiğini de gösterebilir. Kapsayıcıya erişim hakları CryptSetProvParam kullanılarak anahtar kümesi oluşturucu tarafından verilebilir.
Blockquote
Şimdi sorularım şunlardır: Ben CryptSetProvParam edip etmediklerini sorun- , bu exceactly ne yapar? Basit uygulama işletim sistemi ayarlarını değiştirecek normal mi?
- MD5'te C++ pencerelerinde hesap yapmak için daha az zor bir yol var mı?
Birisi bana ne yapacağı konusunda iyi bir tavsiyede bulunabiliyorsa bunu inceleyeceğim.
Onlarınki:
Teşekkür
Kamu adanmış bir uygulama [burada bulunabilir] (http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5). –
teşekkürler, ama şimdilik kendimi uygulamamayı tercih ediyorum. – RRR
Kendiniz uygulamıyorsunuz. Sadece md5.c ve md5.h'yi projenize bırakın ve işlevleri çağırın. –