J'utilise le code C # suivant pour calculer un hachage MD5 à partir d'une chaîne. Cela fonctionne bien et génère une chaîne hexadécimale de 32 caractères comme celle-ci:
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 hexadécimale de 16 caractères (ou une chaîne de 12 caractères)? Une chaîne hexadécimale de 32 caractères est bonne mais je pense que ce sera ennuyeux pour le client de saisir le code!
Réponses:
Selon MSDN
Créer MD5:
la source
la source
BitConverter
cela ne fonctionne pas de la même manière sous Windows et Linux, voir cette question: stackoverflow.com/questions/11454004/…J'essayais de créer une représentation sous forme de chaîne de hachage MD5 en utilisant LINQ, cependant, aucune des réponses n'était des solutions LINQ, ajoutant ainsi cela à la panoplie de solutions disponibles.
la source
return string.Join( "", hash.ComputeHash( Encoding.UTF8.GetBytes(observedText) ).Select( x => x.ToString("x2") ) );
return string.Concat( hash.ComputeHash( Encoding.UTF8.GetBytes(observedText) ).Select( x => x.ToString("x2") ) );
place. Son intention est un peu plus courte, peut-être plus claire, et fonctionne légèrement plus rapidement (augmentation des performances <10%).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 32 caractères.
La réduction de la taille du hachage réduit la sécurité et augmente le risque de collision et de rupture du système.
Peut-être que si vous nous dites plus sur ce que vous essayez d'accomplir, nous pourrons peut-être vous aider davantage.
la source
Vous pouvez utiliser
Convert.ToBase64String
pour convertir la sortie 16 octets de MD5 en une chaîne de ~ 24 caractères. Un peu mieux sans réduire la sécurité. (j9JIbSY8HuT89/pwdC8jlw==
pour votre exemple)la source
Supporte la chaîne et le flux de fichiers.
exemples
-
la source
Je suppose qu'il est préférable d'utiliser le codage UTF-8 dans la chaîne MD5.
la source
Un hachage MD5 est de 128 bits, vous ne pouvez donc pas le représenter en hexadécimal avec moins de 32 caractères ...
la source
la source
Une alternative plus rapide à la réponse existante pour .NET Core 2.1 et supérieur:
Vous pouvez l'optimiser encore plus si vous êtes sûr que vos chaînes sont suffisamment petites et remplacent encoding.GetBytes by unsafe int GetBytes (ReadOnlySpan chars, Span bytes) alternative.
la source
Cette solution nécessite c # 8 et tire parti de
Span<T>
. Notez que vous devrez toujours appeler.Replace("-", string.Empty).ToLowerInvariant()
pour formater le résultat si nécessaire.la source
la source
https://docs.microsoft.com/en-us/dotnet/api/system.security.cryptography.md5?view=netframework-4.7.2
la source
Je voudrais proposer une alternative qui semble fonctionner au moins 10% plus rapidement que la réponse de craigdfrench dans mes tests (.NET 4.7.2):
Si vous préférez avoir
using System.Runtime.Remoting.Metadata.W3cXsd2001;
en haut, le corps de la méthode peut être rendu plus facile à lire en une seule ligne:Assez évident, mais par souci d'exhaustivité, dans le contexte d'OP, il serait utilisé comme:
la source
Idk quelque chose sur les chaînes hexadécimales de 16 caractères ...
Mais voici le mien pour créer un hachage MD5 en une seule ligne.
la source