ASP에서는 Rudong.com 포럼 등에서 사용하는 ASP의 MD5 기능을 사용했습니다. MD5 기능으로 암호화된 문자열은 다음과 같습니다.
1165d25d8cd021d5
그리고 Asp.Net에서는 다음 방법을 사용합니다.
System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password.Text,"MD5")
MD5 암호화 결과는 다음과 같습니다.
12C403B91165D25D8CD021D5F9B5BB7F
그 이유는 ASP의 MD5 함수가 32비트 MD5 Hashvalue의 9~25번째 비트를 사용한 후 암호문으로 소문자로 변경하기 때문입니다. 이를 알면 ASP.NET 결과를 사용하여 약간의 처리만으로 이전 데이터베이스의 암호 문자열을 비교할 수 있습니다.
ASP의 MD5 함수에서 라인 353 및 354:
'MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d))
MD5=LCase(WordToHex(b) & WordToHex(c)) '16바이트 데이터베이스 비밀번호에 맞게 자릅니다 :D
첫 번째 문장은 32비트 암호문을 모두 가져오라는 것이고, 두 번째 문장은 가운데 9~25번째 비트를 16비트 암호문으로 가져오는 것입니다.
vb.net의 경우 또 문제가 발생합니다. vb.net에서는 System.Web.Security 네임스페이스를 사용할 수 없으며, MD5 암호화에는 위의 간단한 방법을 사용할 수 없습니다. 그래서 이를 처리하기 위해 다음 함수를 작성했습니다.
VB.NET:
'MD5 암호화 기능
공용 공유 함수 MD5(ByVal strSource를 문자열로, ByVal 코드를 Int16으로)를 문자열로
'여기에서는 ASCII로 인코딩된 비밀번호의 원본 텍스트가 사용됩니다. 중국어 문자를 비밀번호로 사용하려면 UnicodeEncoding을 사용할 수 있지만 ASP의 MD5 기능과 호환되지 않습니다.
Dim dataToHash As Byte() = (New System.Text.ASCIIEncoding).GetBytes(strSource)
Dim 해시값 As Byte() = CType(System.Security.Cryptography.CryptoConfig.CreateFromName("MD5"), System.Security.Cryptography.HashAlgorithm).ComputeHash(dataToHash)
Dim i를 정수로 표시
케이스 코드 선택
Case 16 '16비트 문자의 암호화 결과 선택
i = 4에서 11의 경우
MD5 += Hex(hashvalue(i)).ToLower
다음
Case 32 '32비트 문자의 암호화 결과 선택
i = 0 ~ 15의 경우
MD5 += Hex(hashvalue(i)).ToLower
다음
Case Else '코드가 잘못된 경우 전체 문자열, 즉 32비트 문자를 반환합니다.
i = 0의 경우 hashvalue.Length - 1
MD5 += Hex(hashvalue(i)).ToLower
다음
선택 종료
종료 기능
소스: AndyDavis 블로그