2012-02-12 14 views
5

Oturum açma/oturumu kapatma özelliğine sahip bir web sitesi yapmaya çalışıyorum ve düzgün bir şekilde şifreleme ve parolaları tuzlamayı planlıyorum. Karşı karşıya kaldığım problem, şifreyi veritabanında saklamak için nasıl giderim. Karmaşık şifreli şifreyi veritabanında saklamak zorunda olduğumu biliyorum (düz metin veya düz şifreli değil), ama ikili veriyi veritabanına eklemek için teknik olarak nasıl birşeyler yapacağımı bilmiyorum.C# kullanarak SQL Server veritabanında karma nasıl saklayabilirim?

Veritabanında veri alabilmemin tek yolu, ilk denemelerde, bir base64 dizesine dönüştürülen ve varchar parola alanına eklenen ikili verilere sahip olmaktı, ancak bir şey doğru yolda olmadığını söylüyor. yapmak için.

Veritabanındaki parola alanı şu anda bir varchar, ancak anladığım kadarıyla karma bir parola ikili. Bu yüzden, şifre alanını ikili bir nesneye değiştirdiysem bile, 'u aslında'un nasıl ekleyeceğini bilmiyorum!

Eğer bir anlam ifade etmiyorsam lütfen açıklama isteyin ve size geri döneceğim.

+1

Karma bir varchar olabilir ... bu ikili, hiç meraktan yoksun olmak zorunda değil, kullandığınız işlevin işlevi nedir? – hackartist

+1

Neden base64 kullanmak istemiyorsunuz? Bu basit ve veriler boyut konusunda endişelenmeyecek kadar küçüktür. –

+0

Base64, karma değeri insan tarafından okunabilir formda bırakan en güvenli yoldur. Tuzlanmış bir hashın düz metin olarak saklanmasında yanlış bir şey yoktur; Bu bir karma değil, bir parola saklamanın ardındaki amaç. – Douglas

cevap

3

Hayır, karma bir parolanın bir varbin alanında saklanması gerekmez; onu kodlayabilir ve bir varchar alanına depolayabilirsiniz. Base64, her türlü karakteri kodlamak için iyi bir alternatiftir.

+2

Bu tür dizeleri oluşturmaz ve ısırık dizisi değil ne tür bir karma kullanırsınız? Tüm kriptografik fonksiyonların 128, 160, 256 veya 512 bit gibi bir dizi bit üreteceğini biliyorum ve bu bir dizgi değil (dizeler bir kodlama kullanılarak saklanır). –

+0

@MartinLiversage Parolaları w/o sorunlu varchar alanlarında depolamak için MD5 hash'ları kullandım. Linux, looooong süresi için/etc/parolalarda MD5 sağlamalarını kullanmıştır. Önemli olan, onları bir varbin alanında saklamak zorunda değilsiniz. – Icarus

+1

Elbette karmaları varchar sütunlarında saklayabilir, ancak bunları base64 kodlaması gibi bir şeyi kullanarak kodlamanız gerekir. Cevabınız, karmanın bir dizgede anlamlı olmayan rastgele ikili dizileri hesaba katmadan doğrudan saklanabileceğini gösteriyor gibi görünüyor. –

6

Microsoft SQL Server'da, ikili verileri binary veri türüne sahip sütunlara (veya değişken uzunluk verisine ihtiyacınız varsa varbinary) depolayabilirsiniz. Bunu şifreli ve tuzlanmış şifreler için kullanabilirsiniz. 512 bitlik bir karma işlev kullanırsanız ve ayrıca 512 bitlik bir tuz kullanmak isterseniz, 2 * 512/8 = 128 bayt (ör. binary(128) tuz ve karma saklamak için

) veritabanı okuma ve ikili veri yazma konusunda size yardımcı olmalıdır Ancak, belki doğrudan bir tabloya bir ikili değeri eklemek için bazı SQL kullanmak istiyorum böyle sözdizimini kullanabilirsiniz.:. gerçekten

insert into MyTable values (0x123456789ABCDEF) 

Sorumun cevabı için senin soru, ancak kendi şifre özelliğini uygulamakla uğraşıyorsanız, gelecekte hata yapmaktan kaçınmak için önceden oluşturulmuş bir endüstriyel güç bileşenini kullanmayı düşünebilirsiniz: ASP.NET has a membership provider Örneğin: