TNB Library
TnbMd5Computer.h
[詳解]
1#pragma once
11#include "TnbStr.h"
12
13
14
15//T-TestCaseコードカバレッジDisable
16#pragma comment(user,"T-Coverage Disable")
17
18
19
20//TNB Library
21namespace TNB
22{
23
24
25
26#ifndef _TnbDOXYGEN //Document作成用シンボル
27 namespace MD5
28 {
29 //RSA Data Security のソース
30 #include "other/MD5.h"
31 };
32#endif
33
34
35
57{
58 MD5::MD5_CTX m_context;
59public:
60
65 struct TResult
66 {
68 BYTE hash[16];
71 {
72 CStr s;
73 loop ( i, 16 )
74 {
75 s += CStr::Fmt(_T("%02x"), hash[i]);
76 }
77 return s;
78 }
79 };
80
83 {
84 MD5::MD5Init(&m_context);
85 }
86
94 void SetLoadMagic(DWORD a, DWORD b, DWORD c, DWORD d)
95 {
96 m_context.state[0] = a;
97 m_context.state[1] = b;
98 m_context.state[2] = c;
99 m_context.state[3] = d;
100 }
101
107 void Update(size_t size, LPCVOID P)
108 {
109 MD5::MD5Update(&m_context, static_cast<const BYTE*>(P), size);
110 }
111
116 void Update(LPCSTR lpszText)
117 {
118 Update(STRLIB::GetLen(lpszText), lpszText);
119 }
120
127 {
128 TResult t;
129 MD5::MD5Final(t.hash, &m_context);
130 MD5::MD5Init(&m_context);
131 return t;
132 }
133
140 static TResult ComputeHash(size_t size, LPCVOID P)
141 {
142 TResult t;
143 MD5::MD5_CTX context;
144 MD5::MD5Init(&context);
145 MD5::MD5Update(&context, static_cast<const BYTE*>(P), size);
146 MD5::MD5Final(t.hash, &context);
147 return t;
148 }
149
155 static TResult ComputeHash(LPCSTR lpszText)
156 {
157 return ComputeHash(STRLIB::GetLen(lpszText), lpszText);
158 }
159#if 0
169 static TResult ComputeHmacMd5(size_t sizeInput, LPCVOID pInput, size_t sizeKey, LPCVOID pKey)
170 {
171 TResult t;
172 BYTE ipad[64];
173 BYTE opad[64];
174 if ( sizeKey>64 )
175 {
176 // キーが64バイトより大きい場合はキーのダイジェストをキーにする
177 t = ComputeHash(sizeKey, pKey);
178 pKey = t.hash;
179 sizeKey = 16;
180 }
181 // MD5(key XOR opad, MD5(key XOR ipad, input)) の計算
182 ::FillMemory(ipad, sizeof(ipad), 0x36);
183 ::FillMemory(opad, sizeof(opad), 0x5c);
184 const BYTE* B = static_cast<const BYTE*>(pKey);
185 for ( size_t i = 0; i < sizeKey; i++ )
186 {
187 ipad[i] ^= B[i];
188 opad[i] ^= B[i];
189 }
190 CMd5Computer m;
191 m.Update(64, ipad);
192 m.Update(sizeInput, pInput);
193 t = m.GetHash();
194 m.Update(64, opad);
195 m.Update(16, t.hash);
196 return m.GetHash();
197 }
198
206 static TResult ComputeHmacMd5(LPCSTR lpszInput, LPCSTR lpszKey)
207 {
208 return ComputeHmacMd5(STRLIB::GetLen(lpszInput), lpszInput, STRLIB::GetLen(lpszKey), lpszKey);
209 }
210#endif
211};
212
213
214
215}; // TNB
216
217
218
219//T-TestCaseコードカバレッジEnable
220#pragma comment(user,"T-Coverage Enable")
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
文字列管理関係のヘッダ
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
MD5(message-digest algorithm)計算クラス.
static TResult ComputeHash(LPCSTR lpszText)
[計算] ハッシュ計算
static TResult ComputeHash(size_t size, LPCVOID P)
[計算] ハッシュ計算
void Update(LPCSTR lpszText)
[設定] 対象データ追加
void Update(size_t size, LPCVOID P)
[設定] 対象データ追加
CMd5Computer(void)
コンストラクタ
TResult GetHash(void)
[計算] ハッシュ取得
void SetLoadMagic(DWORD a, DWORD b, DWORD c, DWORD d)
[設定] ロードマジック値設定
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
Definition: TnbStr.h:1206
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
Definition: TnbStrLib.h:44
TNB Library
Definition: TnbDoxyTitle.txt:2
Md5処理クラスの結果型.
BYTE hash[16]
ハッシュ情報
CStr GetString(void)
ハッシュ情報(文字列)取得