Neden bu kadar çok karma ve şifrelenmiş dizge eşittir işareti ile sonuçlanıyor?


64

C # ve MSSQL'de çalışıyorum ve beklediğiniz gibi şifrelerimi tuzladım ve karıştırdım.

Bir nvarchar sütununda saklanan karışıma baktığımda (örneğin kutu aspnet üyelik sağlayıcısı). Üretilen Salt ve Hash değerlerinin neden bir veya iki eşittir işaretiyle sonuçlandığını her zaman merak etmişimdir.

Şifreleme algoritmalarıyla çalışırken benzer şeyler gördüm, bu tesadüf mü yoksa bunun bir nedeni var mı?


19
Bir kenara, Base64 ile kodlanmış bir ikili veriyi bir NVARCHAR alanında saklıyorsanız, 6x depolama atığınızı ağlarım! Birincisi, Base64 ASCII'nin alt yarısında sadece 64 karakter içerebilir (bu yüzden sadece yarısını kurtarmak için VARCHAR'a ihtiyacınız olacak). İkide, Base64 her veri baytını 1-4 karakterde patlatır. SQL Server zaten
hasatlarınızı kodlamadan şişirmeden saklayabilen

3
@WillieWheeler, karma bir şekilde saklanmak zorunda. Base64 mükemmel bir depolama ortamı olmayabilir, ancak içinde doğal olarak yanlış bir şey yok. Eğer hash("my password")dizi üretir [1,2,3,4,5]ve bir veritabanında bu değerleri saklamak gerekir, dize saklamak daha kötü seçimler vardır AQIDBAU=kullanımda hash fonksiyonu ise (Tabii ki, zaten bir dize üreten o zaman Base64 şifrelemektir biraz saçma geliyor. )
Brian S

2
@WillieWheeler Sanırım noktayı kaçırıyorsunuz. Brian S'nin yazdıklarını tekrar okuyunuz - karma64 için base64'ün özelliklerinden bahsetmiyordu - saçma olurdu, baz64 karma bir algoritma değildir. Bir karma değerin (karma işlev / algoritma tarafından üretilen) base64 biçiminde depolanmasında yanlış bir şey olmadığını söylüyor.
Andrew Savinykh

3
OP, hash'ı sakladığını ve eşittir işaretleriyle bittiğini söylüyor. Bu, Base64 kodlamasıyla karıştırmanın kafasını karıştırdığını gösteriyor. Mesele şu ki, base64'ün bir karma kodlaması iyi bir şeyse, elbette, ama bunun ne alakası var ki?
Willie Wheeler

2
Evet, sonunda neler olduğunu anladım. SSH ortak ve özel anahtar dosyalarıma baktım ve = / == sonları olduğunu da fark ettim. Bunlar, BrianS ve zespri'nin tarif ettiği gibi bayt dizilerinin base64 kodlamalarıdır. Teşekkürler beyler.
Willie Wheeler

Yanıtlar:


95

Bu karma dize (genellikle?) Base64 biçiminde kodlanır ve eşit işaret, uzunluğu (bayt sayısını) üçe bölünebilir hale getirmek için dizgiyi doldurmak için kullanılır. Wikipedia oldukça iyi açıklıyor: http://en.wikipedia.org/wiki/Base64 .


36

Base 64 kodlama dolgusu olabilir mi?

'==' dizisi, son grubun yalnızca bir bayt içerdiğini ve '=', iki bayt içerdiğini gösterir. Aşağıdaki örnek, yukarıdaki alıntıların tamamının girişinin kesilmesinin çıktı dolgusunu nasıl değiştirdiğini göstermektedir:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.