2009-09-13 13 views
7

La pregunta es bastante autoexplicativa. Busqué en Google muchos sitios, muchos métodos, intenté muchas codificaciones, pero no puedo hacer que coincida.¿Cómo puedo reproducir un hash SHA512 en C# que se ajuste al PHP SHA512?

Estoy tratando de hacer coincidir la cadena "asdasd". (http://www.fileformat.info/tool/hash.htm?text=asdasd)

+1

PHP no tiene una aplicación SHA-512 por lo que yo sé. ¿Podría publicar el código que está usando? –

+1

Estaba equivocado. PHP parece ser compatible con bastantes funciones hash: http://www.php.net/hash –

+0

Pero aún me gustaría ver el código que estás usando para responder a esta pregunta. (perdón por los comentarios no deseados :-D) –

Respuesta

16

Prueba este

using System.Security.Cryptography 

public static string HashPassword(string unhashedPassword) 
{ 
    return BitConverter.ToString(new SHA512CryptoServiceProvider().ComputeHash(Encoding.Default.GetBytes(unhashedPassword))).Replace("-", String.Empty).ToUpper(); 
} 
+2

¡Fácil, agradable, pequeño, rápido digamos perfecto! – Polo

+0

¿No es SHA612CryptoServiceProvider un objeto desechable? ¿Esto filtrará una instancia de proveedor de servicio en cada llamada? –

+0

¿hay un sha612 ahora? podría haber jurado que era 512 ...^_^ – r3wt

1

BitConverter funciona bien ...

var testVal = "asdasd"; 
var enc = new ASCIIEncoding(); 
var bytes = enc.GetBytes(testVal); 

var sha = new SHA512Managed(); 
var result = sha.ComputeHash(bytes); 

var resStr = BitConverter.ToString(result); 
var nodash = resStr.Replace("-", ""); 

nodash.Dump(); 

(fijo para hash de 512 bits, lo siento :)

+0

No sé si eso es solo un error tipográfico en tu código, pero él estaba pidiendo sha512, no sha256. –

0

yo pasamos varias horas tratando de obtener una función hash .NET para que coincida con la función Crypt de PHP. No es divertido.

Existen múltiples desafíos aquí, ya que la implementación PHP de Crypt devuelve una cadena codificada en base64, y no realiza múltiples iteraciones hash (por ejemplo, 5000 es predeterminado para Crypt). No pude obtener resultados similares de .NET usando varias bibliotecas, hasta que encontré CryptSharp. Acepta una sal similar a la función de PHP (o la C original) (por ejemplo, "$6$round=5000$mysalt"). Tenga en cuenta que no hay $ finales, y que si no proporciona un sal, se generará automáticamente uno al azar.

puede encontrar CryptSharp aquí: http://www.zer7.com/software.php?page=cryptsharp

Buena lectura de fondo: - http://www.akkadia.org/drepper/SHA-crypt.txt

Cuestiones relacionadas