نمایش نتایج 1 تا 4 از 4

نام تاپیک: سوال در مورد MD5

  1. #1

    سوال در مورد MD5

    سلام
    حدود 30 دقيقه است دارم تو گوگل و برنامه نويس جستجو ميكنم ولي نتونستم به جواب برسم.
    من ميخوام تو MFC‌ برنامه اي بنويسم كه از يك كادر ويرايش يك String رو دريافت كرده و در كادر ديگر hash شده اون رو به MD5 نمايش بده.

    اگه براتون امكانش هست library هاي لازم براي MD5 در C++‎ (واسه دلفي پيدا كردم ولي C++‎ هيچ جا نيست ) رو اينجا بزاريد.
    يه توضيح كوچيك هم در مورد چگونگي hash كردن به روشي كه در بالا گفتم بديد بسيار بسيار ممنون ميشم

    با تشكر

  2. #2

    نقل قول: سوال در مورد MD5

    برای این کار در ویندوز باید از CryptoAPI استفاده کنید:
    http://msdn.microsoft.com/en-us/library/aa380252(VS.85).aspx

    نمونه مثال ها و مقالات:
    http://www.codeguru.com/cpp/misc/misc/cryptoapi/

    ضمنا می توانید از ++CryptoC نیز که یک پروژه متن باز ++C هست برای همه سیستم عامل ها استفاده کنید:
    http://www.cryptopp.com/

  3. #3

    نقل قول: سوال در مورد MD5

    نيما جان واقعا ممنون اما من چيزي كه دنبالش بودم بين اينا پيدا نكردم، اگه براتون امكانش هست به اين مبتدي كمك كنيد و يك پروژه كه يك رشته رو به md5 هش ميكنه اينجا قرار بديد.
    واقعا ممنونم

  4. #4

    نقل قول: سوال در مورد MD5

    با وجود این همه مثال و منبع که لیست شد، عجیب هست که آن ها را مطالعه نکردید!

    در هر حال کپی برابر اصل از این لینک:

    BOOL SavePasswordToRegistry(TCHAR* szPassword)
    {
    BOOL bResult = TRUE;

    TCHAR szKey[256];
    HKEY hRegKey = NULL;
    _tcscpy(szKey, _T("SOFTWARE\\Your Company\\Your Program\\"));

    if (RegCreateKey(HKEY_CURRENT_USER, szKey, &hRegKey) != ERROR_SUCCESS)
    return FALSE;

    HCRYPTPROV hProv = NULL;
    HCRYPTKEY hKey = NULL;
    HCRYPTKEY hXchgKey = NULL;
    HCRYPTHASH hHash = NULL;
    DWORD dwLength;
    // Used to encrypt the real password
    TCHAR szLocalPassword[] = _T("Mz6@a0i*");

    // Get handle to user default provider.
    if (CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0))
    {
    // Create hash object.
    if (CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
    {
    // Hash password string.
    dwLength = sizeof(TCHAR)*_tcslen(szLocalPassword);
    if (CryptHashData(hHash, (BYTE *)szLocalPassword, dwLength, 0))
    {
    // Create block cipher session key based on hash of the password.
    if (CryptDeriveKey(hProv, CALG_RC4, hHash, CRYPT_EXPORTABLE, &hKey))
    {
    // Determine number of bytes to encrypt at a time.
    dwLength = sizeof(TCHAR)*_tcslen(szPassword);

    // Allocate memory.
    BYTE *pbBuffer = (BYTE *)malloc(dwLength);
    if (pbBuffer != NULL)
    {
    memcpy(pbBuffer, szPassword, dwLength);
    // Encrypt data
    if (CryptEncrypt(hKey, 0, TRUE, 0, pbBuffer, &dwLength, dwLength))
    {
    // Write data to registry.
    DWORD dwType = REG_BINARY;
    // Add the password.
    if (::RegSetValueEx(hRegKey, _T("Password"), 0, REG_BINARY, pbBuffer, dwLength)!=ERROR_SUCCESS)
    {
    bResult = FALSE;
    }
    ::RegCloseKey(hRegKey);
    }
    else
    {
    bResult = FALSE;
    }
    // Free memory.
    free(pbBuffer);
    }
    else
    {
    bResult = FALSE;
    }
    CryptDestroyKey(hKey); // Release provider handle.
    }
    else
    {
    // Error during CryptDeriveKey!
    bResult = FALSE;
    }
    }
    else
    {
    // Error during CryptHashData!
    bResult = FALSE;
    }
    CryptDestroyHash(hHash); // Destroy session key.
    }
    else
    {
    // Error during CryptCreateHash!
    bResult = FALSE;
    }
    CryptReleaseContext(hProv, 0);
    }



    در مثال فوق یک رشته از ورودی دریافت می شود و با MD5 کار انجام می شود، پارامتر دوم CryptCreateHash الگوریتم را تعیین می کند.

    شما به سایر بخش ها و به قسمت های کار با رجیستری توجهی نکنید.

    پس با این توابع:
    CryptAcquireContext
    CryptCreateHash
    CryptHashData


قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •