2011-03-17 18 views
6

Estoy usando C# y calculando SHA1 para una cadena. Mi pregunta es si esto siempre producirá texto sin formato 0-1 y A-Z? ¿O va a producir ha con personajes especiales también? Quiero decir, ¿la función ComputeHash aquí devolverá siempre texto sin formato?SHA1 ¿Texto sin formato? C# .NET

SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); 
string receivedValue = BitConverter.ToString(sha1.ComputeHash(to_be_hash)).Replace("-", ""); 

No estoy seguro, pero creo que debería generar caracteres especiales solo si se convierte en Base 64.

+0

que tipo es 'to_be_hash'? – knocte

Respuesta

8

Es una cadena hexagonal, por lo que solo 0-9 y A-F.

En realidad, es solo una matriz de bytes, pero utiliza el método string BitConverter.ToString(byte[]) para convertirlo en una cadena hexadecimal en pares de dos separados por un - (guión).

Hexadecimal solo contiene: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. 16 opciones, un par de dos de ellas representan un solo byte (16 * 16 = 2^8 = 256, es un byte único).

+0

¿Quiere decir que la salida de la función C# ComputeHash es siempre una cadena HEX? –

+0

No la salida es en realidad un 'byte []', pero la convierte en una cadena hexadecimal, por lo que siempre es seguro. Extendí la respuesta. – Aidiakapi

+0

Aquí está el prototipo: byte público [] ComputeHash ( \t byte [] buffer ) –

25

La API hash devuelve un byte[] que contiene una secuencia arbitraria de 20 bytes.

Necesita convertirlo usted mismo en una cadena. Usar Hex o Base64 como codificaciones son elecciones populares.

BitConverter.ToString() convierte la cadena en hexadecimal con bytes delimitados por -. Como luego elimina el - s termina con una cadena hexadecimal de 40 caracteres (0 - 9, A - F), que es un subconjunto de caracteres alfanuméricos.

Por lo tanto, su código siempre devolverá una cadena alfanumérica, aunque SHA-1 no lo hace.

SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider(); 
byte[] hash = sha1.ComputeHash(to_be_hash) 
string delimitedHexHash = BitConverter.ToString(hash); 
string hexHash = delimitedHexHash.Replace("-", ""); 
Cuestiones relacionadas