преобразовать строковое значение в md5 - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь преобразовать String в md5, что я сделал:

  public static string MD5Hash(string input)
        {
            StringBuilder hash = new StringBuilder();
            MD5CryptoServiceProvider md5provider = new MD5CryptoServiceProvider();
            byte[] bytes = md5provider.ComputeHash(new UTF8Encoding().GetBytes(input));

            for (int i = 0; i < bytes.Length; i++)
            {
                hash.Append(bytes[i].ToString("x2"));
            }
            return hash.ToString();
        }

Код выше, когда я тестировал MD5Ha sh ("MyCode") его возвращено: 6403df8223bf310152ad235731e79902 (32 символа)

, но md5 в моей базе данных 0x6403DF8223BF310152AD235700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 (64 символа)

отсутствует «0X» в начале и «нули» в окончание

Ответы [ 4 ]

1 голос
/ 21 июня 2020

Это работает для меня -

    public static string MD5Hash(string text)
    {
        MD5 md5 = new MD5CryptoServiceProvider();

        //compute hash from the bytes of text  
        md5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(text));


        //get hash result after compute it  
        byte[] result = md5.Hash;

        StringBuilder strBuilder = new StringBuilder();
        for (int i = 0; i < result.Length; i++)
        {
            //change it into 2 hexadecimal digits  
            //for each byte  
            strBuilder.Append(result[i].ToString("x2"));
        }

        return strBuilder.ToString();
    }
1 голос
/ 21 июня 2020

попробуйте это

    public static string Md5Hash(string text)
    {
        using (var md5 = new MD5CryptoServiceProvider())
        {
            using (var tds = new TripleDESCryptoServiceProvider())
            {
                tds.Key = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(encryptionKey));
                tds.Mode = CipherMode.ECB;
                tds.Padding = PaddingMode.PKCS7;

                using (var transform = tds.CreateEncryptor())
                {
                    byte[] textBytes = UTF8Encoding.UTF8.GetBytes(text);
                    byte[] bytes = transform.TransformFinalBlock(textBytes, 0, textBytes.Length);
                    return Convert.ToBase64String(bytes, 0, bytes.Length);
                }
            }
        }
    }
1 голос
/ 21 июня 2020

Размер ha sh для алгоритма MD5 составляет 128 бит.

Методы ComputeHa sh класса MD5 возвращают ha sh в виде массива из 16 байтов. Обратите внимание, что некоторые реализации MD5 создают 32-символьный шестнадцатеричный формат ha sh.

Поэтому вам нужно проверить в базе данных, почему вы получаете лишние символы?

и для вашей информации , правильное значение MD5 для MyCode будет 8e995273698f53088fe2ad4a0888d213

Код для создания MD5 ниже.

public static string GenerateMD5(string input)
{
    
    using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create())
    {
        byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input);
        byte[] hashBytes = md5.ComputeHash(inputBytes);

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < hashBytes.Length; i++)
        {
            sb.Append(hashBytes[i].ToString("X2"));
        }
        return sb.ToString();
    }
}

Ссылка: https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.md5?view=netcore-3.1#remarks

0 голосов
/ 21 июня 2020

Согласно вашим примерам, то, что генерирует строки из 64 символов в вашей базе данных, выглядит примерно так:

public static string MD5Hash(string input)
{
    using (var md5 = new MD5CryptoServiceProvider())
        return string.Concat("0x",
            BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(input)))
            .Replace("-", string.Empty).PadRight(62, '0'));
}

Я бы не стал называть функцию MS5Hash в этом случае, и, как вы можете видеть, строки базы данных представляют собой сцепленные строки, а MD5 ha sh - это только средняя часть каждой.

...