2011-03-07 5 views
0

가능한 중복 : 나는 문자열 입력을 응용 프로그램을 작성하고 (문자열의 해시 값을 계산한다해시 기능 .NET


Hash Function .NET

님, 안녕하세요? 입력의 최대 문자 수는 16입니다.), 출력은 22 자 (또는 그 이하지만 더 작지는 않음) 길이 여야합니다.

.NET 프레임 워크에서 몇 가지 해시 함수를 제안했는데 무엇을 사용해야할지 모르겠다. 누구에게도 가장 좋은 함수는 무엇인지 나와 어울리지 않고 어떻게 출력을 22 자로 제한 할 수 있습니까? (base64에서)?

감사

+0

정확히 같은 질문을 두 번 게시했습니다. –

+0

@Marcelo - 공평하게 그는 * "(on base64)"*를 지정했습니다. – ChaosPandion

+0

질문에 오류가있는 경우 질문 바로 아래에있는 수정 버튼을 사용하여 질문을 변경할 수 있습니다. –

답변

4

당신은 다음의 기준-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); 
+0

예,하지만 diffrents 문자열이 동일한 hase를 제공하지 않도록하고 싶습니다. trunncat은 충돌을 줄 위험이 있으며, "salt"를 정의해야하는 이유를 설명 할 수 있습니까? 왜 "secretKey"만 사용하지 않을까요? – RRR

+1

salt는 해시 출력에 임의성을 추가합니다. 의무 사항은 아니지만 데이터를 안전하게 보관해야하는 경우 소금을 추가로 섭취하는 것이 좋습니다. 절단하면 다른 어떤 방법보다 충돌이 더 이상 증가하지 않습니다. 결국, 귀하의 요구 사항은 22 바이트 길이입니다. 당신은 궁극적으로 어떤 방식 으로든 잘라 버려야 할 것입니다. 대안은 추가 된 복잡성이 문제는 아니지만 충돌의 위험이 있다고 생각하면 해시하기 전에 압축을 수행하는 것입니다. –

+0

@RRR, base-64로 변환하면 16 바이트 입력이 24 바이트가됩니다. –