MD2/MD4/MD5ハッシュの計算は次の手順で行えます。(戻る)
- 鍵コンテナの取得(CryptAcquireContext)
- ハッシュ値の生成(CryptCreateHash)
- ハッシュ値の追加(CryptHashData)
- ハッシュ値の取得(CryptGetHashParam)
- ハッシュ値の破棄(CryptDestroyHash)
- 鍵コンテナの破棄(CryptReleaseContext)
プロトタイプ宣言
BOOL CryptAcquireContext( HCRYPTPROV* phProv, LPCTSTR pszContainer, LPCTSTR pszProvider, DWORD dwProvType, DWORD dwFlags ); BOOL CryptReleaseContext( HCRYPTPROV hProv, DWORD dwFlags ); BOOL CryptCreateHash( HCRYPTPROV hProv, ALG_ID Algid, HCRYPTKEY hKey, DWORD dwFlags, HCRYPTHASH* phHash ); BOOL CryptDestroyHash( HCRYPTHASH hHash ); BOOL CryptHashData( HCRYPTHASH hHash, BYTE* pbData, DWORD dwDataLen, DWORD dwFlags ); BOOL CryptGetHashParam( HCRYPTHASH hHash, DWORD dwParam, BYTE* pbData, DWORD* pdwDataLen, DWORD dwFlags );
使い方
#include <stdio.h> #include <string.h> #include <windows.h> #include <wincrypt.h> // マクロ関数 #define getStrMD2(s,hash) getStrHash(s,hash,CALG_MD2) #define getStrMD4(s,hash) getStrHash(s,hash,CALG_MD4) #define getStrMD5(s,hash) getStrHash(s,hash,CALG_MD5) // 文字列のMD2/MD4/MD5コードを計算 extern bool getStrHash( const char string[], char hash[16], ALG_ID algID ) { bool bRet = false; HCRYPTPROV hProv = NULL; // 鍵コンテナ HCRYPTHASH hHash = NULL; // ハッシュ・オブジェクト LPBYTE pbHash = (LPBYTE)hash; DWORD dwHashLen = 16; ZeroMemory( pbHash, dwHashLen ); if ( CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT | CRYPT_MACHINE_KEYSET) ){ if ( CryptCreateHash(hProv,algID,0,0,&hHash) ){ if ( CryptHashData(hHash,(LPBYTE)string,(DWORD)strlen(string),0) ){ if ( CryptGetHashParam(hHash,HP_HASHVAL,pbHash,&dwHashLen,0) ){ bRet = true; } } CryptDestroyHash( hHash ); } CryptReleaseContext( hProv, 0 ); } return bRet; } // メイン関数 int main( void ) { char hash[ 16 ]; char buff[ 256 ]; char *find; while ( fgets(buff,sizeof(buff),stdin) != NULL ){ if ( (find = strchr(buff,'\n')) != NULL ){ *find = '\0'; } if ( getStrMD5(buff,hash) ){ for ( int i = 0 ; i < 16 ; i++ ){ printf( "%02X", (BYTE)hash[i] ); } printf( ":%s\n", buff ); } } return 0; }
- 文字列を入力します。
- またはパイプやリダイレクションを利用して入力させます。
- 出力は128ビットの16進32桁と文字列が標準出力に表示されます。
関連記事
- CRC8の計算
- CRC8テーブルの自動作成
- CRC8テーブルで計算
- CRC16テーブルで計算(CRC-CCITT)
- CRC32テーブルで計算
- ファイルのCRC32の計算
- MD2/MD4/MD5ハッシュの計算(128ビット)
- ファイルのMD2/MD4/MD5ハッシュの計算(128ビット)
※コメント投稿者のブログIDはブログ作成者のみに通知されます