md5 해시 바이트 배열을 문자열로 변환
바이트 배열 인 해시 된 결과를 문자열로 어떻게 변환 할 수 있습니까?
byte[] bytePassword = Encoding.UTF8.GetBytes(password);
using (MD5 md5 = MD5.Create())
{
byte[] byteHashedPassword = md5.ComputeHash(bytePassword);
}
byteHashedPassword
문자열 로 변환해야 합니다.
public static string ToHex(this byte[] bytes, bool upperCase)
{
StringBuilder result = new StringBuilder(bytes.Length*2);
for (int i = 0; i < bytes.Length; i++)
result.Append(bytes[i].ToString(upperCase ? "X2" : "x2"));
return result.ToString();
}
그런 다음 확장 메서드로 호출 할 수 있습니다.
string hexString = byteArray.ToHex(false);
나는 항상 이것이 가장 편리하다는 것을 알았습니다.
string hashPassword = BitConverter.ToString(byteHashedPassword).Replace("-","");
이상한 이유로 BitConverter는 바이트 사이에 대시를 넣는 것을 좋아하므로 교체는 그냥 제거합니다.
업데이트 : "소문자"16 진수를 선호하는 경우 .ToLower () 및 붐을 수행하십시오.
이 작업을 긴밀한 루프로 수행하고 많은 작업을 수행하는 경우 적어도 두 개의 암시 적 문자열 캐스트 및 크기 조정이 진행되므로 비용이 많이들 수 있습니다.
및를 사용 Convert.ToBase64String
하여 Convert.FromBase64String
바이트 배열을 문자열로 쉽게 변환 할 수 있습니다 .
만약 당신이 'Hex preference'캠프에 있다면 이것을 할 수 있습니다. 이것은 기본적으로 Philippe Leybaert의 답변의 최소 버전입니다.
string.Concat(hash.Select(x => x.ToString("X2")))
B1DB2CC0BAEE67EA47CFAEDBF2D747DF
해시 일뿐 아니라 일반 문자열로 표시 할 수없는 값이있을 수 있으므로 Base64 인코딩 문자열로 변환하는 것이 가장 좋습니다.
string s = Convert.ToBase64String(bytes);
그리고 사용
byte[] bytes = Convert.FromBase64(s);
바이트를 다시 가져옵니다.
글쎄, 당신은 바이트와 인코딩을 취하는 문자열 생성자를 사용할 수 있지만, 많은 재미있는 문자 (널 바이트, 줄 바꿈, 제어 문자 등)를 포함 할 수 있기 때문에 문자열을 관리하기 어려울 것입니다.
이 작업을 수행하는 가장 좋은 방법은 작업하기 쉬운 멋진 문자열을 얻기 위해 base 64로 인코딩하는 것입니다.
string s = Convert.ToBase64String(bytes);
그리고 그 문자열에서 바이트 배열로 돌아가려면 :
byte[] bytes = Convert.FromBase64String(s);
내가 만든 Nuget 패키지에 관심이있는 사람이라면 CryptoStringify 라는 이름 으로 바이트 배열을 사용하지 않고도 깔끔한 구문을 사용하여 문자열을 해시 된 문자열로 변환 할 수 있습니다.
using (MD5 md5 = MD5.Create())
{
string strHashedPassword = md5.Hash(password);
}
그것은에 확장 방법입니다 HashAlgorithm
및 KeyedHashAlgorithm
그래서 SHA1, HMACSHA1, SHA256 등도에서 작동합니다.
https://www.nuget.org/packages/cryptostringify
참고 URL : https://stackoverflow.com/questions/2435695/converting-a-md5-hash-byte-array-to-a-string
'code' 카테고리의 다른 글
forEach 루프 Java 8 for Map 항목 세트 (0) | 2020.10.31 |
---|---|
C의 문자열 패딩 (0) | 2020.10.31 |
SQL Server Management Studio에서 SSIS 패키지를 보려면 어떻게합니까? (0) | 2020.10.30 |
예외 발생 대 함수에서 None 반환? (0) | 2020.10.30 |
clang의 -Wweak-vtables의 의미는 무엇입니까? (0) | 2020.10.30 |