Por que tantas seqüências de hash e criptografadas terminam em um sinal de igual?

64

Trabalho em C # e MSSQL e, como seria de esperar, guardo minhas senhas salgadas e com hash.

Quando olho para o hash armazenado em uma coluna nvarchar (por exemplo, o provedor de associação aspnet pronto para uso). Sempre fiquei curioso para saber por que os valores gerados de Salt e Hash sempre parecem terminar em um ou dois sinais de igual.

Eu já vi coisas semelhantes ao trabalhar com algoritmos de criptografia, isso é coincidência ou existe uma razão para isso?

Liath
fonte
19
Além disso, se você estiver armazenando dados binários codificados em Base64 em um campo NVARCHAR, choro pelo seu desperdício de armazenamento de 6x! Por um lado, o Base64 pode conter apenas 64 caracteres na metade inferior do ASCII (portanto, você só precisa do VARCHAR para salvar a metade). Para dois, o Base64 explode cada byte de dados em 1 a 4 caracteres. SQL Server já tem um tipo VARBINARY que é bem capaz de armazenar seus hashes sem inchaço da codificação, e não se preocupa com agrupamento em suas comparações ... :-)
jimbobmcgee
3
@WillieWheeler, o hash deve ser armazenado de alguma forma. O Base64 pode não ser o meio de armazenamento perfeito, mas não há nada inerentemente errado com ele. Se hash("my password")produz a matriz [1,2,3,4,5]e eu preciso armazenar esses valores em um banco de dados, há opções piores do que armazenar a cadeia de caracteres AQIDBAU=(é claro, se a função hash em uso estiver produzindo uma cadeia de caracteres, parece um pouco tolo então a Base64 a codifica. )
Brian S
2
@WillieWheeler Acho que você está perdendo o objetivo. Releia o que Brian S escreveu - ele não estava falando sobre propriedades de base64 para hash - isso seria absurdo base64 não é um algoritmo de hash. Ele está dizendo que não há nada errado em armazenar um hash (produzido por uma função / algoritmo de hash) na forma base64.
Andrew Savinykh
3
O OP diz que ele armazena o hash e termina com sinais de igual. Isso sugere que ele está confundindo hash com codificação Base64. Se a questão é boa para a base64 codificar um hash, é claro, mas o que isso tem a ver com alguma coisa?
perfil completo de Willie Wheeler
2
Sim, finalmente percebi o que está acontecendo. Procurei nos meus arquivos de chave pública e privada do SSH e notei que eles também têm os finais = / ==. Essas são codificações base64 de matrizes de bytes, como BrianS e zespri descrevem. Obrigado rapazes.
Willie Wheeler

Respostas:

95

Essas cadeias de hash são (geralmente?) Codificadas no formato Base64 e o sinal de igual é usado para preencher a cadeia de caracteres para tornar o comprimento (número de bytes) divisível por três. A Wikipedia explica muito bem: http://en.wikipedia.org/wiki/Base64 .

svenslaggare
fonte
36

Poderia ser preenchimento de codificação Base 64?

A sequência '==' indica que o último grupo continha apenas um byte e '=' indica que continha dois bytes. O exemplo abaixo ilustra como o truncamento da entrada de toda a citação acima altera o preenchimento da saída:

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

Jaydee
fonte