180 votes

Calculer un hachage MD5 à partir d'une chaîne

J'utilise le code C# suivant pour calculer un hachage MD5 à partir d'une chaîne. Il fonctionne bien et génère une chaîne hexagonale de 32 caractères comme ceci : 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...

Existe-t-il un moyen d'utiliser un code comme celui-ci pour générer une chaîne hexagonale de 16 caractères (ou une chaîne de 12 caractères) ? Une chaîne hexagonale de 32 caractères est bonne, mais je pense que ce sera ennuyeux pour le client de saisir le code !

295voto

Anant Dabhi Points 3713

Selon MSDN

Créer 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);

        return Convert.ToHexString(hashBytes); // .NET 5 +

        // Convert the byte array to hexadecimal string prior to .NET 5
        // StringBuilder sb = new System.Text.StringBuilder();
        // for (int i = 0; i < hashBytes.Length; i++)
        // {
        //     sb.Append(hashBytes[i].ToString("X2"));
        // }
        // return sb.ToString();
    }
}

103voto

Michael Points 1649
// 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

19voto

craigdfrench Points 483

Essayait de créer une représentation de chaîne de caractères de hachage MD5 en utilisant LINQ, cependant, aucune des réponses n'était des solutions LINQ, donc en ajoutant cela à la gamme de solutions disponibles.

string result;
using (MD5 hash = MD5.Create())
{
    result = String.Join
    (
        "",
        from ba in hash.ComputeHash
        (
            Encoding.UTF8.GetBytes(observedText)
        ) 
        select ba.ToString("x2")
    );
}

12voto

L.B Points 54001

Vous pouvez utiliser Convert.ToBase64String pour convertir une sortie de 16 octets de MD5 en une chaîne de caractères ~24. Un peu mieux sans réduire la sécurité. (j9JIbSY8HuT89/pwdC8jlw== pour votre exemple)

10voto

KingCronus Points 3405

Cela dépend entièrement de ce que vous essayez d'accomplir. Techniquement, vous pouvez simplement prendre les 12 premiers caractères du résultat du hachage MD5, mais la spécification de MD5 est de générer un caractère 32.

La réduction de la taille du hachage réduit la sécurité et augmente les risques de collisions et de bris du système.

Peut-être que si vous nous en dites plus sur ce que vous essayez d'accomplir, nous pourrons vous aider davantage.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X