2012-04-22 14 views
8

Mam ten kod do zaszyfrowania ciąg SHA256 i obok base64:Deszyfruj z SHA256

public static string Sha256encrypt(string phrase) 
    { 
     UTF8Encoding encoder = new UTF8Encoding(); 
     SHA256Managed sha256hasher = new SHA256Managed(); 
     byte[] hashedDataBytes = sha256hasher.ComputeHash(encoder.GetBytes(phrase)); 
     return Convert.ToBase64String(hashedDataBytes); 
    } 

Jak mogę odszyfrować hasło w drugą stronę?

+0

Zapoznaj się z następującym http://www.codinghorror.com/blog/2012/04/speed-hashing.html, aby uzyskać informacje o haszowaniu haseł. – Stephen

Odpowiedz

13

Zamiast tego należy porównać hash wprowadzonego hasła i przechowywane hasło w bazie danych.

Przykład:

var password = "1234"; 
var hashedPassword = Sha256encrypt(password); 

var allowLogin = hashedPassword == storedPassword; //storedPassword from Database, etc. 

to tylko bardzo podstawowe choć przy użyciu algorytmów hashowania należy rozważyć użycie Salt też.

+0

Dzięki, nie wiem tego. Użyłem go teraz we właściwy sposób;) – netmajor

+2

Więcej niż sól, powinieneś iterować swój hasz. Albo lepiej (dużo lepiej), nie wymyślaj sam: użyj PBKDF2, scrypt lub bcrypt. –

6

Jest to niemożliwe per se. SHA jest funkcją mieszającą, co oznacza, że ​​jest jednokierunkowa i używana tylko do sprawdzania poprawności i podobnych rzeczy. Ponieważ wynik SHA-256 ma stałą długość (256 bitów), co oznacza także, że większość informacji jest tracona podczas jej obliczania.

Można go wymusić na bruterze, co oznacza, że ​​można próbować obliczać wartość mieszającą wielu różnych danych wejściowych i sprawdzać, czy dopasowanie jest zgodne.

Kiedyś w przyszłości można wykryć słabość kryptograficzną dla SHA, co czyni ją przełomową, ale praktycznie nie jest funkcją odwracalną.

Zobacz szczegółowe informacje o funkcjach skrótu na Wikipedia. Nie można odszyfrować wyniku

Powiązane problemy