2009-07-09 2 views
4

PHP 또는 Python과 같은 언어에서는 입력 문자열을 HEXed 표현 인 출력 문자열로 변환하는 편리한 함수가 있습니다.C# : String -> MD5 -> Hex

나는 암호 저장 및 검사, 파일 내용의 체크섬 ..)이 있지만, .NET에서는 바이트 스트림에서만 작업 할 수 있다는 것을 알게되었습니다.

작업을 수행하는 기능 (예 : http://blog.stevex.net/index.php/c-code-snippet-creating-an-md5-hash-string/)은 쉽게 입력 할 수 있지만 잘못된 패턴을 사용하여 누락 된 항목이 있는지 또는 .NET에서 그러한 항목이 없는지 알고 싶습니다.

감사합니다.

+2

MD5 대신 SHA-256 사용을 고려하십시오. – inazaruk

답변

7

주석이 사용할 수있는 제안이 연결 방법은, 약간 다른 방법은 MSDN C# FAQ

을 마우스 오른쪽 버튼으로 나타났다 것 같다하기 :

System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(string, "MD5"); 
+1

그러나 FAQ에 표시된 코드를 사용하지 마십시오. Encoding.ASCII를 사용하므로 모든 비 ASCII 문자를 "?"로 처리합니다. - 아주 끔찍한 해시로 만들고있어. –

5

예 (내가 아는 한 최대 바이트 수). 하지만 당신은 그들을 통해 반복과 같은 일을하여 진수 표현으로 쉽게 그 바이트를 설정할 수 있습니다 :

myByte.ToString("x2"); 

그리고 당신은 사용하여 문자열을 구성하는 바이트 얻을 수 있습니다 : 그래서 그것은 수

System.Text.Encoding.UTF8.GetBytes(myString); 

을 몇 줄로 끝내야한다.

5

하나의 문제는 헥스 '의 아주 개념이다 [문자열]의 표현. "

문자열은 문자의 시퀀스입니다. 이러한 문자가 개별 비트로 어떻게 표시되는지는 인코딩에 따라 다릅니다. .NET에 대한 "네이티브"인코딩은 UTF-16이지만 UTF-8을 사용하여보다 컴팩트 한 표현이 가능합니다 (모든 문자열을 인코딩 할 수있는 기능은 유지하면서). 하지만 가 만드는 그 선택은 직진하지 많은 API를이 있다는 이유 있다는 사실 - 당신이 적절한 인코딩을 선택한 후

당신은 문자열의 인코딩 된 버전을 얻을 Encoding.GetBytes을 사용할 수 있습니다 문자열에서 base64/hex 또는 문자열에서 직접 암호화/해시를 수행합니다. 인 API는 거의 "바이트 배열로 인코딩하고, 적절한 이진 연산을 수행하고, 불투명 한 이진 데이터를 16 진수/16 진수로 디코딩"합니다.

(이는 인코딩을 취할 수있는 유틸리티 클래스를 작성하는 데 가치가 없는지 궁금한데, Func<byte[], byte[]> 및 16 진수/16 진수와 같은 출력 형식 - 이는 문자열에 적용되는 임의의 이진 연산을 나타낼 수 있습니다.)