179

次の C# コードを使用して、文字列から MD5 ハッシュを計算します。これはうまく機能し、次のような 32 文字の 16 進文字列を生成します。 900150983cd24fb0d6963f7d28e17f72

string sSourceData;
byte[] tmpSource;
byte[] tmpHash;
sSourceData = "MySourceData";

//Create a byte array from source data.
tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData);
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource);

// and then convert tmpHash to string...

このようなコードを使用して 16 文字の 16 進文字列 (または 12 文字の文字列) を生成する方法はありますか? 32 文字の 16 進文字列もいいですが、お客様がコードを入力するのは退屈だと思います。

4

20 に答える 20

283

MSDNによると

MD5 を作成します。

public static string CreateMD5(string input)
{
    // Use input string to calculate MD5 hash
    using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
    {
        byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
        byte[] hashBytes = md5.ComputeHash(inputBytes);

        // Convert the byte array to hexadecimal string
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < hashBytes.Length; i++)
        {
            sb.Append(hashBytes[i].ToString("X2"));
        }
        return sb.ToString();
    }
}
于 2014-06-04T07:27:47.453 に答える
103
// given, a password in a string
string password = @"1234abcd";

// byte array representation of that string
byte[] encodedPassword = new UTF8Encoding().GetBytes(password);

// need MD5 to calculate the hash
byte[] hash = ((HashAlgorithm) CryptoConfig.CreateFromName("MD5")).ComputeHash(encodedPassword);

// string representation (similar to UNIX format)
string encoded = BitConverter.ToString(hash)
   // without dashes
   .Replace("-", string.Empty)
   // make lowercase
   .ToLower();

// encoded contains the hash you want
于 2012-07-13T19:54:56.697 に答える
12

Convert.ToBase64StringMD5 の 16 バイト出力を ~24 文字の文字列に変換するために使用できます。セキュリティを低下させることなく、少し良くなります。(j9JIbSY8HuT89/pwdC8jlw==あなたの例では)

于 2012-07-12T15:05:52.367 に答える
10

何を達成しようとしているかに完全に依存します。技術的には、MD5 ハッシュの結果から最初の 12 文字を取得することもできますが、MD5 の仕様では 32 文字のハッシュを生成することになっています。

ハッシュのサイズを小さくすると、セキュリティが低下し、衝突やシステムの破損の可能性が高くなります。

おそらく、達成しようとしていることについて詳しく教えていただければ、より多くのことをお手伝いできるかもしれません。

于 2012-07-12T14:28:30.837 に答える
6
public static string Md5(string input, bool isLowercase = false)
{
    using (var md5 = MD5.Create())
    {
        var byteHash = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
        var hash = BitConverter.ToString(byteHash).Replace("-", "");
        return (isLowercase) ? hash.ToLower() : hash;
    }
}
于 2020-12-24T07:51:01.723 に答える
4

MD5 ハッシュは 128 ビットなので、32 文字未満の 16 進数で表すことはできません...

于 2012-07-12T14:28:52.647 に答える
1
    public static string GetMD5(string encryptString)
    {
        var passByteCrypt = new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(encryptString));

        return ByteArrayToString(passByteCrypt);
    }
    public static string ByteArrayToString(byte[] bytes)
    {
        var output = new StringBuilder(bytes.Length);

        foreach (var t in bytes)
        {
            output.Append(t.ToString("X2"));
        }

        return output.ToString().ToLower();
    }

これは単純な md5 ByteCrypt です

于 2021-10-13T05:59:36.833 に答える