¿Por qué tantas cadenas cifradas y hash terminan en un signo igual?

64

Trabajo en C # y MSSQL y, como era de esperar, guardo mis contraseñas saladas y picadas.

Cuando miro el hash almacenado en una columna nvarchar (por ejemplo, el proveedor de membresía aspnet listo para usar). Siempre he tenido curiosidad de por qué los valores generados de Salt y Hash siempre parecen terminar en uno o dos signos iguales.

He visto cosas similares mientras trabajaba con algoritmos de cifrado, ¿es una coincidencia o hay una razón para ello?

Liath
fuente
19
Por otro lado, si está almacenando datos binarios codificados en Base64 en un campo NVARCHAR, ¡lloro por su desperdicio de almacenamiento 6x! Por un lado, Base64 solo puede contener 64 de los caracteres en la mitad inferior de ASCII (por lo que solo necesita VARCHAR para guardar la mitad). Para dos, Base64 explota cada byte de datos en 1-4 caracteres. SQL Server ya tiene un tipo VARBINARIO que es bastante capaz de almacenar sus hashes sin necesidad de codificar, y no le importa la clasificación en sus comparaciones ... :-)
jimbobmcgee
3
@WillieWheeler, el hash debe almacenarse de alguna manera. Base64 puede no ser el medio de almacenamiento perfecto, pero no tiene nada de malo. Si hash("my password")produce la matriz [1,2,3,4,5]y necesito almacenar esos valores en una base de datos, hay peores opciones que almacenar la cadena AQIDBAU=(por supuesto, si la función hash en uso ya está produciendo una cadena, parece un poco tonto codificarla con Base64. )
Brian S
2
@WillieWheeler Creo que te estás perdiendo el punto. Vuelva a leer lo que Brian S escribió: no estaba hablando de las propiedades de base64 para el hash, eso sería absurdo que base64 no sea un algoritmo de hashing. Está diciendo que no hay nada de malo en almacenar un hash (producido por una función / algoritmo hash) en forma base64.
Andrew Savinykh
3
El OP dice que almacena el hash y termina con signos iguales. Eso sugiere que está confundiendo el hashing con la codificación Base64. Si el punto es que está bien codificar en base64 un hash, entonces, por supuesto, pero ¿qué tiene eso que ver con algo?
Willie Wheeler
2
Sí, finalmente me di cuenta de lo que está pasando. Miré en mis archivos de clave pública y privada SSH y noté que también tienen las terminaciones = / ==. Estas son codificaciones base64 de matrices de bytes, como describen BrianS y zespri. Gracias chicos.
Willie Wheeler

Respuestas:

95

Estas cadenas hash están codificadas (¿generalmente?) En el formato Base64 y el signo igual se usa para rellenar la cadena para hacer que la longitud (número de bytes) sea divisible por tres. Wikipedia lo explica bastante bien: http://en.wikipedia.org/wiki/Base64 .

svenslaggare
fuente
36

¿Podría ser el relleno de codificación Base 64?

La secuencia '==' indica que el último grupo contenía solo un byte, y '=' indica que contenía dos bytes. El siguiente ejemplo ilustra cómo truncar la entrada de la totalidad de la cita anterior cambia el relleno de salida:

http://en.wikipedia.org/wiki/Base64#Output_padding

Jaydee
fuente