programing tip

C #의 해시 문자열

itbloger 2020. 11. 3. 07:43
반응형

C #의 해시 문자열


.NET에서 해시 문자열을 얻으려고 할 때 문제가 c#있습니다.

이미 몇 개의 웹 사이트를 시도했지만 대부분은 파일을 사용하여 해시를 얻습니다. 다른 문자열은 너무 복잡합니다. 다음과 같은 웹용 Windows 인증의 예를 찾았습니다.

FormsAuthentication.HashPasswordForStoringInConfigFile(tbxPassword.Text.Trim(), "md5")

파일 이름이 포함 된 문자열을보다 안전하게 만들려면 해시를 사용해야합니다. 어떻게 할 수 있습니까?

예:

string file  = "username";
string hash = ??????(username); 

"md5"가 아닌 다른 해싱 알고리즘을 사용해야합니까?


using System.Security.Cryptography;

public static byte[] GetHash(string inputString)
{
    HashAlgorithm algorithm = SHA256.Create();
    return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
}

public static string GetHashString(string inputString)
{
    StringBuilder sb = new StringBuilder();
    foreach (byte b in GetHash(inputString))
        sb.Append(b.ToString("X2"));

    return sb.ToString();
}

추가 참고 사항

  • MD5 및 SHA1은 오래되고 안전하지 않은 알고리즘이므로이 솔루션은 SHA256을 사용합니다. 또는 주석에서 지적한대로 BCrypt 또는 Scrypt사용할 수 있습니다 .
  • 또한 주석에서 지적한대로 해시를 " 솔팅 "하고 입증 된 암호화 알고리즘을 사용하십시오.

암호 저장 목적으로 해시 문자열을 얻는 가장 빠른 방법은 다음 코드입니다.

    internal static string GetStringSha256Hash(string text)
    {
        if (String.IsNullOrEmpty(text))
            return String.Empty;

        using (var sha = new System.Security.Cryptography.SHA256Managed())
        {
            byte[] textData = System.Text.Encoding.UTF8.GetBytes(text);
            byte[] hash = sha.ComputeHash(textData);
            return BitConverter.ToString(hash).Replace("-", String.Empty);
        }
    }

비고 :

  • 메서드가 자주 호출되는 경우 sha변수 생성은 클래스 필드로 리팩토링되어야합니다.
  • 출력은 인코딩 된 16 진수 문자열로 표시됩니다.

나는 당신의 질문의 전체 범위를 정말로 이해하지 못하지만 필요한 모든 것이 문자열의 해시라면 그것을 얻는 것은 매우 쉽습니다.

GetHashCode 메서드를 사용하십시오.

이렇게 :

string hash = username.GetHashCode();

나는 당신이 찾고있는 것이 해싱이 아니라 암호화라고 생각합니다. 해싱을 사용하면 "hash"변수에서 원래 파일 이름을 검색 할 수 없습니다. 암호화를 사용하면 할 수 있으며 안전합니다.

.NET의 암호화에 대한 자세한 내용은 VB.NET 을 사용하는 ASP.NET의 AES를 참조하십시오 .


//Secure & Encrypte Data
    public static string HashSHA1(string value)
    {
        var sha1 = SHA1.Create();
        var inputBytes = Encoding.ASCII.GetBytes(value);
        var hash = sha1.ComputeHash(inputBytes);
        var sb = new StringBuilder();
        for (var i = 0; i < hash.Length; i++)
        {
            sb.Append(hash[i].ToString("X2"));
        }
        return sb.ToString();
    }

참고URL : https://stackoverflow.com/questions/3984138/hash-string-in-c-sharp

반응형