2011-03-17 10 views
6

C#을 사용하고 문자열에 대해 SHA1을 계산 중입니다. 내 질문은이 항상 평범한 텍스트 0-1 및 A - Z 생산 것입니다? 또는 특수 문자가 너무 생성됩니까? 내 말은 ComputeHash 함수는 여기에 항상 일반 텍스트를 반환 할 것입니까?SHA1 일반 텍스트? C# .NET

SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); 
string receivedValue = BitConverter.ToString(sha1.ComputeHash(to_be_hash)).Replace("-", ""); 

잘 모르겠지만 기본 64로 변환 된 경우에만 특수 문자가 생성되어야한다고 생각합니다.

+0

어떤 유형이'to_be_hash'입니까? – knocte

답변

8

16 진수 문자열이므로 0-9와 A-F 만 사용합니다.

실제로는 단지 바이트 배열이지만 string BitConverter.ToString(byte[]) 메서드를 사용하여 - (대시)로 구분 된 두 쌍의 16 진수 문자열로 바꿉니다.

16 진수는 0, 1, 2, 3, 4, 5, 6, 7, 8,9, A, B, C, D, E, F 16 개 옵션 만 포함합니다. 단일 바이트 (16 * 16 = 2^8 = 256, 단일 바이트)를 나타냅니다.

+0

당신은 C# 함수의 출력을 의미합니다 ComputeHash는 항상 16 진수 문자열입니까? –

+0

실제로 출력은'byte []'가 아니지만 16 진수 문자열로 변환하면 항상 안전합니다. 나는 대답을 연장했다. – Aidiakapi

+0

다음은 프로토 타입입니다. public byte [] ComputeHash ( \t byte [] 버퍼 ) –

25

해싱 API 자체는 임의의 20 바이트 시퀀스가 ​​포함 된 byte[]을 반환합니다.

직접 문자열로 변환해야합니다. 엔코딩으로 Hex 또는 Base64를 사용하는 것이 일반적입니다.

BitConverter.ToString()은 문자열을 -으로 구분 된 바이트로 16 진수로 변환합니다. -을 제거 했으므로 영숫자 문자의 하위 집합 인 40 자의 16 진수 문자열 (0-9, A-)이됩니다.

SHA-1 코드는 항상 영숫자 문자열을 반환합니다.

SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); 
byte[] hash = sha1.ComputeHash(to_be_hash) 
string delimitedHexHash = BitConverter.ToString(hash); 
string hexHash = delimitedHexHash.Replace("-", "");