Mam ciąg znaków i chcę go zaszyfrować za pomocą funkcji skrótu SHA-256 przy użyciu C#. Chcę coś takiego:Uzyskaj ciąg znaków SHA-256
string hashString = sha256_hash("samplestring");
Czy jest coś wbudowanego w ramy, aby to zrobić?
Mam ciąg znaków i chcę go zaszyfrować za pomocą funkcji skrótu SHA-256 przy użyciu C#. Chcę coś takiego:Uzyskaj ciąg znaków SHA-256
string hashString = sha256_hash("samplestring");
Czy jest coś wbudowanego w ramy, aby to zrobić?
Realizacja może być jak ten
public static String sha256_hash(String value) {
StringBuilder Sb = new StringBuilder();
using (SHA256 hash = SHA256Managed.Create()) {
Encoding enc = Encoding.UTF8;
Byte[] result = hash.ComputeHash(enc.GetBytes(value));
foreach (Byte b in result)
Sb.Append(b.ToString("x2"));
}
return Sb.ToString();
}
EDIT:LINQ realizacja jest bardziej zwięzły, ale, prawdopodobnie, mniej czytelny:
public static String sha256_hash(String value) {
using (SHA256 hash = SHA256Managed.Create()) {
return String.Concat(hash
.ComputeHash(Encoding.UTF8.GetBytes(value))
.Select(item => item.ToString("x2")));
}
}
Edycja 2 : .NET Core
public static String sha256_hash(string value)
{
StringBuilder Sb = new StringBuilder();
using (var hash = SHA256.Create())
{
Encoding enc = Encoding.UTF8;
Byte[] result = hash.ComputeHash(enc.GetBytes(value));
foreach (Byte b in result)
Sb.Append(b.ToString("x2"));
}
return Sb.ToString();
}
jak odszyfrować hash z powrotem do hasła? –
@daniel metlitski: ty * nie można *: hash to * funkcja jednokierunkowa *, możesz obliczyć hash, ale nie możesz odzyskać argumentu. Podczas rejestracji nowego użytkownika nie przechowuj hasła, ale jego hash; na uwierzytelnianie, oblicz hash na podane hasło i porównaj hash z przechowywanym hashem. –
Wszystko jest fajne, ale twoja konwencja nazewnictwa jest okropna - wielkie zmienne lokalne, małe nazwy metod - oto dobry wykład na wieczór: https://docs.microsoft.com/en-us/dotnet/standard/design- wytyczne/ogólne konwencje nazewnictwa –
http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256.aspx. -1. –
Hasche działają na bajty, a nie na ciągi. Najpierw musisz wybrać kodowanie, które przekształci ciąg w bajty. Polecam do tego UTF-8. – CodesInChaos
Coś mi mówi, że ludzie czytający ten wpis powinni również sprawdzić: https://stackoverflow.com/questions/4948322/fundamental-difference-between-hashing-and-encryption-algorithms – Ziezi