MD5 암호화를 찾아보면서...
MD5 암호화 리턴값이 다른 경우가 꽤나 있다. 그래서 windows에서 제공하는 WinAPI32 를 사용하기로 했다.
WinCrypt API를 사용하기로 했다.
그리고, 값이 제대로 나오는 방법을 찾아서 구현했다.
또, 아래 사이트가 내가 구현한 것과 거의 유사하다.
아래 소스가 공유가 많이 되었으면 좋겠다. 동일한 md5 암호화 값이 나오게
[개발/Delphi] WinCrypt API32 로 문자열 MD5 암호화 하기
출처: http://www.scalabium.com/faq/dct0173.htm
function MD5(const Value: string): string; var hCryptProvider: HCRYPTPROV; hHash: HCRYPTHASH; bHash: array[0..$7F] of Byte; dwHashLen: dWord; i: Integer; begin dwHashLen := 16; if (Value = '') then begin Result := 'd41d8cd98f00b204e9800998ecf8427e'; exit; end else Result := ''; {get context for crypt default provider} if CryptAcquireContext(@hCryptProvider, nil, nil, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT or CRYPT_MACHINE_KEYSET) then begin {create hash-object MD5} if CryptCreateHash(hCryptProvider, CALG_MD5, 0, 0, @hHash) then begin {get hash from password} if CryptHashData(hHash, @Value[1], Length(Value), 0) then begin if CryptGetHashParam(hHash, HP_HASHVAL, @bHash[0], @dwHashLen, 0) then begin for i := 0 to dwHashLen-1 do Result := Result + IntToHex(bHash[i], 2); end; end; {destroy hash-object} CryptDestroyHash(hHash); end; {release the context for crypt default provider} CryptReleaseContext(hCryptProvider, 0); end; Result := AnsiLowerCase(Result); end;
반응형
'Delphi, RadStudio' 카테고리의 다른 글
[IT/개발] delphi32.$$$ 파일 delphi32.dro 파일명으로 변경 에러 (0) | 2012.06.19 |
---|---|
[개발/delphi] 델파이 파일 로딩 에러 "corrupt portfolio stream" (0) | 2012.05.24 |
[개발/delphi] 모니터 켜고 끄기 (0) | 2012.05.12 |
[개발/delphi] string to char array 문자열 복사 (0) | 2012.02.21 |
[개발/delphi] 다른 프로그램 버튼 클릭하기 (0) | 2012.02.07 |
댓글