J'ai un problème en essayant d'obtenir une chaîne de hachage dans c#
.
J'ai déjà essayé quelques sites Web, mais la plupart 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")
Je dois utiliser un hachage pour sécuriser une chaîne contenant un nom de fichier. Comment puis je faire ça?
Exemple:
string file = "username";
string hash = ??????(username);
Devrais-je utiliser un autre algorithme de hachage et non pas "md5"?
using System.Security.Cryptography;
public static byte[] GetHash(string inputString)
{
HashAlgorithm algorithm = SHA256.Create();
return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
}
public static string GetHashString(string inputString)
{
StringBuilder sb = new StringBuilder();
foreach (byte b in GetHash(inputString))
sb.Append(b.ToString("X2"));
return sb.ToString();
}
Notes complémentaires
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
doit être refactorisée dans un champ de classe;Je ne comprends pas vraiment 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();
Je pense que ce que vous recherchez n'est pas un hachage mais un 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é.
Voir AES dans ASP.NET avec VB.NET pour plus d'informations sur le cryptage dans .NET.
//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();
}