2012-04-22 145 views
8

tengo ese código para cifrar la cadena de sha256 y al lado de base 64:Descifrar 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); 
    } 

Como puedo descifrar la contraseña en el otro lado?

+0

Consulte la siguiente http://www.codinghorror.com/blog/2012/04/speed-hashing.html para obtener información sobre las contraseñas hash. – Stephen

Respuesta

13

No puede descifrar el resultado de One Way Hash. Lo que debe hacer en su lugar es comparar un hash de la contraseña ingresada versus el hash almacenado en la base de datos.

Ejemplo:

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

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

Esto es sólo lo básico, sin embargo, cuando se utilizan algoritmos de hash debe considerar el uso de un Salt también.

+0

Gracias, no lo sé. Utilicé ahora en la forma correcta;) – netmajor

+2

Más que una sal, deberías iterar tu hash. O mejor (mucho mejor), no lo invente usted mismo: utilice PBKDF2, scrypt o bcrypt. –

6

Es imposible per se. SHA es una función hash, que implica que es unidireccional y se usa solo para validación y cosas similares. Como el resultado de SHA-256 es de longitud fija (256 bits), eso también significa que la mayor parte de la información se pierde al calcularla.

Puedes usar fuerza bruta, lo que significa que puedes intentar calcular el hash de un gran número de entradas diferentes y ver si el hash coincide.

En algún momento en el futuro se puede encontrar una debilidad criptográfica para SHA lo que hace que se pueda romper, pero prácticamente no es una función reversible.

Consulte los detalles sobre las funciones hash en Wikipedia.