Perché così tante stringhe con hash e crittografate terminano con un segno di uguale?


64

Lavoro in C # e MSSQL e, come prevedibile, memorizzo le mie password salate e con hash.

Quando guardo l'hash memorizzato in una colonna nvarchar (ad esempio il provider di appartenenza aspnet out of the box). Sono sempre stato curioso di sapere perché i valori di Salt e Hash generati sembrano sempre finire con uno o due segni di uguale.

Ho visto cose simili mentre lavoravo con algoritmi di crittografia, è una coincidenza o c'è un motivo?


19
A parte questo, se stai memorizzando dati binari con codifica Base64 in un campo NVARCHAR, piango per i tuoi 6 rifiuti di archiviazione! Per uno, Base64 può contenere solo 64 caratteri nella metà inferiore di ASCII (quindi è necessario solo VARCHAR per salvare la metà). Per due, Base64 esplode ogni byte di dati in 1-4 caratteri. SQL Server ha già un tipo VARBINARY che è abbastanza in grado di archiviare i tuoi hash senza gonfiore dalla codifica e non si preoccupa delle regole di confronto nei suoi confronti ... :-)
jimbobmcgee

3
@WillieWheeler, l'hash deve essere archiviato in qualche modo. Base64 potrebbe non essere il supporto di archiviazione perfetto, ma non c'è nulla di intrinsecamente sbagliato in esso. Se hash("my password")produce l'array [1,2,3,4,5]e devo archiviare quei valori in un database, ci sono scelte peggiori rispetto alla memorizzazione della stringa AQIDBAU=(Naturalmente, se la funzione hash in uso sta già producendo una stringa, sembra un po 'sciocco quindi Base64 lo codifica. )
Brian S,

2
@WillieWheeler Penso che ti stia perdendo il punto. Rileggi ciò che Brian S ha scritto - non stava parlando delle proprietà di base64 per l'hash - che sarebbe assurdo base64 non è un algoritmo di hashing. Sta dicendo che non c'è niente di sbagliato nel memorizzare un hash (prodotto da una funzione / algoritmo hash) in forma base64.
Andrew Savinykh,

3
L'OP afferma che memorizza l'hash e termina con segni di uguale. Ciò suggerisce che sta confondendo l'hash con la codifica Base64. Se il punto è che va bene per base64 codificare un hash, allora ovviamente, ma che cosa ha a che fare con qualcosa?
Willie Wheeler,

2
Sì, ho finalmente capito cosa sta succedendo. Ho guardato nei miei file di chiave pubblica e privata SSH e ho notato che hanno anche i finali = / ==. Queste sono codifiche base64 di array di byte, come descrivono BrianS e zespri. Grazie ragazzi.
Willie Wheeler,

Risposte:


95

Queste stringhe con hash sono (di solito?) Codificate nel formato Base64 e il segno uguale viene usato per riempire la stringa e rendere la lunghezza (numero di byte) divisibile per tre. Wikipedia lo spiega abbastanza bene: http://en.wikipedia.org/wiki/Base64 .


36

Potrebbe essere il padding di codifica Base 64?

La sequenza '==' indica che l'ultimo gruppo conteneva solo un byte e '=' indica che conteneva due byte. L'esempio seguente mostra come il troncamento dell'input dell'intera citazione sopra cambia il riempimento dell'output:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.