2011-03-07 5 views
2

문자열 입력을 사용하고 문자열의 해시 값을 계산하는 앱을 작성해야합니다 (입력의 최대 문자 수는 16 개입니다), 출력 길이는 22 자 (또는 그 이하).해시 함수 .NET

.NET 프레임 워크는 많은 해시 함수를 제안하며 어떤 용도로 사용해야할지 모르겠다. 아무에게도 최고의 기능을 사용하도록 권하고 싶습니다. 어떻게 22 문자로 출력을 제한 할 수 있습니까?

감사

+1

해쉬 함수를 암호화 목적으로 사용 하시겠습니까? 해시 테이블에 사용 하시겠습니까? – Ani

+0

@Ani : base64 출력 22 바이트는 해시 테이블 (일반적으로 기계 단어 크기의 해시를 사용)이 아닌 암호화 해시 함수를 제안합니다. –

+0

MD5 [링크] [1] 및 SHA-1은 더 이상 안전하지 않습니다. SHA-2 또는 SHA-3 이동 [1] : http://security.stackexchange.com/questions/19906/is-md5-considered-insecure – user1849818

답변

5

항상 "=="(패딩)이므로 128 비트 출력을 제공하는 MD5를 사용하고 base64로 변환 할 때 마지막 두 문자를 버릴 수 있습니다. 이것은 22자를 줄 것입니다.

string GetEncodedHash(string password, string salt) 
{ 
    MD5 md5 = new MD5CryptoServiceProvider(); 
    byte [] digest = md5.ComputeHash(Encoding.UTF8.GetBytes(password + salt); 
    string base64digest = Convert.ToBase64String(digest, 0, digest.Length); 
    return base64digest.Substring(0, base64digest.Length-2); 
} 
2

당신은 다음의 기준-64로 변환, 해싱 함수 중 하나를 사용하여 간단하게 필요한 크기로 해시를자를 수 있습니다. 귀하의 경우 해시를 15 바이트로 자르므로 20 바이트의 기본 64 바이트가됩니다. 나는 이전 예제를 재사용 할 것이다.

string secretKey = "MySecretKey"; 
string salt = "123"; 
System.Security.Cryptography.SHA1 sha = System.Security.Cryptography.SHA1.Create(); 
byte[] preHash = System.Text.Encoding.UTF32.GetBytes(secretKey + salt); 
byte[] hash = sha.ComputeHash(preHash); 
string password = prefix + System.Convert.ToBase64String(hash, 0, 15); 
1

22 base64 문자는 해시 함수의 16 바이트 출력을 의미합니다. 128 비트를 출력하는 해시 함수를 사용할 수 있습니다.