役立つ便利なサイト
役に立つフリーソフト
コラム集:パスワードの暗号化 |
←前コラム 目次 次コラム→ |
|
sample |
分類:VC++/MFC 著者:a000000403 更新日付:2010/02/13 |
CString CCryptMD5::convMD5( CString m_passWord ) { BYTE mbuf[32]=""; strcpy( (char *)mbuf, m_passWord ); DWORD dwDataLen = (DWORD)strlen((char*)mbuf) + 1; HCRYPTPROV hProv; if( !CryptAcquireContext( &hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, 0 ) ) { // デフォルトキーコンテナを作る if(!CryptAcquireContext( &hProv, // ハンドルが戻る NULL, // CSPを利用するユーザー名 // ログインユーザーの場合は NULL MS_DEF_PROV, // MicrosoftのデフォルトCSP PROV_RSA_FULL, // 利用方法(ハッシュ計算や案儀化の計算) CRYPT_NEWKEYSET)) // キーコンテントへのアクション { m_passWord ="ERR_Context"; } else { m_passWord ="ERR_Acq"; } } if( m_passWord == "ERR_Context" ) { } else { HCRYPTHASH hHash; if( !CryptCreateHash( hProv, // CSPのハンドル CALG_MD5, // ハッシュ計算のアルゴリズム 0, // 0, // &hHash )) // ハッシュオブジェクトのハンドル m_passWord ="ERR_CreateHash"; else { if( !CryptHashData( hHash, // ハッシュオブジェクトのハンドル mbuf, // 計算の元となるパスワードデータ strlen((const char*)mbuf), // パスワードのバイト長 0 )) // デフォルトのCSPを使う場合は、0 m_passWord ="ERR_CryptHash"; else { HCRYPTKEY hKey; if( !CryptDeriveKey( hProv, // CSPのハンドル CALG_RC4, // 暗号化のアルゴリズム hHash, // 鍵に使用するハッシュオブジェクト CRYPT_EXPORTABLE, // 鍵の長さ &hKey )) // 暗号化用の鍵が戻る m_passWord ="ERR_DeriveKey"; else { if( !CryptEncrypt( hKey, // 暗号化鍵オブジェクトのハンドル 0, // 暗号化だけの場合は、0 TRUE, // 大量のデータを扱う場合のみ変更 0, // mbuf, // データのポインタ &dwDataLen, // 平文のデータ長 31 )) // バッファのバイト長 m_passWord ="ERR_Encrypt"; else m_passWord = mbuf; } CryptDestroyKey(hKey); // 暗号化キー } } CryptDestroyHash(hHash); // Hash } CryptReleaseContext(hProv, 0); // CSP return m_passWord; // 暗号化パスワードまたはエラーコード } |
|
←前コラム 目次 次コラム→ |