Mengapa begitu banyak string hash dan terenkripsi berakhir dengan tanda sama dengan?

64

Saya bekerja di C # dan MSSQL dan seperti yang Anda harapkan saya menyimpan kata sandi saya asin dan hash.

Ketika saya melihat hash yang disimpan dalam kolom nvarchar (misalnya penyedia kotak aspnet keanggotaan out). Saya selalu ingin tahu mengapa nilai-nilai Salt dan Hash yang dihasilkan selalu berakhir dengan satu atau dua tanda sama dengan.

Saya telah melihat hal serupa ketika bekerja dengan algoritma enkripsi, apakah ini kebetulan atau apakah ada alasan untuk itu?

Liath
sumber
19
Sebagai tambahan, jika Anda menyimpan data biner yang disandikan Base64 di bidang NVARCHAR, saya menangisi limbah penyimpanan 6x Anda! Pertama, Base64 hanya dapat berisi 64 karakter di bagian bawah ASCII (jadi Anda hanya perlu VARCHAR untuk menyimpan setengahnya). Untuk dua, Base64 meledak setiap byte data menjadi 1-4 karakter. SQL Server sudah memiliki tipe VARBINARY yang cukup mampu menyimpan hash Anda tanpa mengasapi dari pengkodean, dan tidak peduli tentang susunan dalam perbandingannya ... :-)
jimbobmcgee
3
@ WillieWheeler, hash harus disimpan entah bagaimana. Base64 mungkin bukan media penyimpanan yang sempurna, tetapi tidak ada yang salah dengan itu. Jika hash("my password")menghasilkan array [1,2,3,4,5]dan saya perlu menyimpan nilai-nilai itu dalam database, ada pilihan yang lebih buruk daripada menyimpan string AQIDBAU=(Tentu saja, jika fungsi hash yang digunakan sudah menghasilkan string, sepertinya agak konyol untuk kemudian Base64 menyandikannya. )
Brian S
2
@ WillieWheeler Saya pikir Anda tidak mengerti intinya. Baca kembali apa yang ditulis Brian S - dia tidak berbicara tentang properti base64 untuk hashing - yang tidak masuk akal base64 bukanlah algoritma hashing. Dia mengatakan bahwa tidak ada yang salah dengan menyimpan hash (dihasilkan oleh fungsi / algoritma hash) dalam bentuk base64.
Andrew Savinykh
3
OP mengatakan bahwa ia menyimpan hash dan berakhir dengan tanda sama dengan. Itu menunjukkan bahwa dia membingungkan hashing dengan encoding Base64. Jika intinya adalah bahwa base64 tidak apa-apa untuk mengkodekan hash, maka tentu saja, tapi apa hubungannya dengan apa pun?
Willie Wheeler
2
Ya, saya akhirnya menyadari apa yang sedang terjadi. Saya mencari di file kunci publik dan pribadi SSH dan memperhatikan bahwa mereka juga memiliki ujung = / ==. Ini adalah pengkodean array byte base64, seperti yang dijelaskan BrianS dan zespri. Terima kasih kawan
Willie Wheeler

Jawaban:

95

String hash ini (biasanya?) Dikodekan dalam format Base64 dan tanda yang sama digunakan untuk mengisi string agar panjang (jumlah byte) dapat dibagi tiga. Wikipedia menjelaskannya dengan cukup baik: http://en.wikipedia.org/wiki/Base64 .

svenslaggare
sumber
36

Mungkinkah basis 64 pengkodean padding?

Urutan '==' menunjukkan bahwa grup terakhir hanya berisi satu byte, dan '=' menunjukkan bahwa ia berisi dua byte. Contoh di bawah ini mengilustrasikan bagaimana memotong input seluruh kutipan di atas mengubah padding output:

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

Jaydee
sumber