변환 md5hash 바이트 배열을 문자열
-
19-09-2019 - |
문제
나는 어떻게 변환하는 해시된 그 결과,바이트 배열,문자열?
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
바이트 어레이를 문자열로 쉽게 변환합니다.
당신이 '16 진수 선호도'캠프에 있다면 이것을 할 수 있습니다. 이것은 기본적으로 Philippe Leybaert의 최소한의 답변입니다.
string.Concat(hash.Select(x => x.ToString("X2")))
B1DB2CC0BAEE67EA47CFAEDBF2D747DF
해시 일뿐 아니라 일반 문자열로 표시 될 수없는 값이 있으므로 가장 좋은 방법은 Base64 인코딩 된 문자열로 변환하는 것입니다.
string s = Convert.ToBase64String(bytes);
그리고 사용
byte[] bytes = Convert.FromBase64(s);
바이트를 되 찾으려면.
잘 사용할 수 있습니다 문자열을 생성하는 바이트하고 인코딩을,하지만 당신은 가능성이 얻을 관리하기 어려운 문자열을 수 있었기 때문에 많은 재미있는 캐릭터(null 바이트를,개행 문자,제어,문자,등등)
은 작업을 수행하는 가장 좋은 방법이 될 것이 인코딩을 가진 기본 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 등에서도 작동합니다.