J'ai un problème en essayant d'obtenir une chaîne de hachage c#
.
J'ai déjà essayé quelques sites Web, mais la plupart d'entre eux utilisent des fichiers pour obtenir le hachage. D'autres qui sont pour les chaînes sont un peu trop complexes. J'ai trouvé des exemples d'authentification Windows pour le Web comme ceci:
FormsAuthentication.HashPasswordForStoringInConfigFile(tbxPassword.Text.Trim(), "md5")
J'ai besoin d'utiliser un hachage pour rendre une chaîne contenant un nom de fichier plus sécurisée. Comment puis je faire ça?
Exemple:
string file = "username";
string hash = ??????(username);
Dois-je utiliser un autre algorithme de hachage et non "md5"?
b.ToString("X2")
que cela signifie?Le moyen le plus rapide, pour obtenir une chaîne de hachage à des fins de stockage de mots de passe, est le code suivant:
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); } }
Remarques:
sha
variable doit être refactorisée dans un champ de classe;la source
SHA1Managed
la classe n'est pas très coûteuse. il consomme environ 130 octets et les initialise à une valeur statique, mais c'est tout. il ne devrait donc pas y avoir de problème de performances dans la plupart des cas.SHA1Managed
estIDisposable
et nécessitent donc d'envelopper son utilisation dans unusing
bloc.Dispose
méthode de but est d'effacer le tampon interne. Si vous ne le faites pas, vous risquez une attaque de la mémoire.SHA1Managed
n'est pas coûteux, je veux dire que sa création ne l'est pas. De plus, un algorithme de hachage n'est pas nécessairement coûteux. Cela ne doit être (extrêmement) coûteux que lorsque vous voulez trouver une collision.Je ne comprends pas vraiment toute la portée de votre question, mais si tout ce dont vous avez besoin est un hachage de la chaîne, il est très facile de l'obtenir.
Utilisez simplement la méthode GetHashCode.
Comme ça:
string hash = username.GetHashCode();
la source
GetHashCode
ne s'agit pas d'un algorithme de hachage cryptographiquement sécurisé. Utilisez au moins SHA256 ou mieux utilisez BCrypt ou Scrypt pour un algorithme sécurisé.Je pense que ce que vous recherchez n'est pas le hachage mais le cryptage. Avec le hachage, vous ne pourrez pas récupérer le nom de fichier d'origine à partir de la variable «hash». Avec le cryptage, vous pouvez, et c'est sécurisé.
Consultez AES dans ASP.NET avec VB.NET pour plus d'informations sur le chiffrement dans .NET.
la source
//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(); }
la source
Si les performances ne sont pas un problème majeur, vous pouvez également utiliser l'une de ces méthodes:
(Si vous souhaitez que la chaîne de hachage soit en majuscules, remplacez-la
"x2"
par"X2"
.)public static string SHA256ToString(string s) { using (var alg = SHA256.Create()) return string.Join(null, alg.ComputeHash(Encoding.UTF8.GetBytes(s)).Select(x => x.ToString("x2"))); }
ou:
public static string SHA256ToString(string s) { using (var alg = SHA256.Create()) return alg.ComputeHash(Encoding.UTF8.GetBytes(s)).Aggregate(new StringBuilder(), (sb, x) => sb.Append(x.ToString("x2"))).ToString(); }
la source
Le moyen le plus court et le plus rapide jamais conçu. Seulement 1 ligne!
public static string StringSha256Hash(string text) => string.IsNullOrEmpty(text) ? string.Empty : BitConverter.ToString(new System.Security.Cryptography.SHA256Managed().ComputeHash(System.Text.Encoding.UTF8.GetBytes(text))).Replace("-", string.Empty);
la source