簡體   English   中英

加密Salt Algo CryptSharp提供不同的密碼加密...如何獲得這個

[英]Encryption Salt Algo CryptSharp gives different encryption of password … How to get ride of this

在注冊時

string crypt = CryptSharp.Crypter.Sha512.GenerateSalt();
crypt = txtspss.Text.Trim();
crypt = CryptSharp.Crypter.Sha512.Crypt(txtspss.Text, crypt);

在登錄時..

string cpass=dr["strUPass"].ToString();
bool matches = Crypter.CheckPassword(pass,cpass);
if (matches)
{....}

鹽應該是獨一無二的。 通過這樣做,試圖破解密碼的人必須對每個密碼進行單獨的編譯,而不是能夠為一百萬個密碼生成哈希值,然后針對整個被盜密碼數據庫進行檢查。

CryptSharp以模塊化加密格式對密碼進行編碼。 這是設計。 假設算法是A,鹽是B,哈希是C.GenerateSalt寫AB,Crypt讀AB並生成C,返回ABC。 在下面,你看,CheckPassword或多或少等同於:

Crypter.Crypt(密碼,crypt)== crypt

因為Crypt只讀取AB,如果你傳遞ABC,它就像傳遞AB一樣。 這就是Crypt在生成和檢查密碼哈希值時的雙重任務。

在注冊時,GenerateSalt和Crypt,以及登錄時,CheckPassword。 許多人會告訴你關於分別存儲鹽等的這個或那個,這是一個很好的一般建議,但模塊化密碼格式的設計使得所需的一切都存儲在同一個字符串中。 這一切都得到了照顧。

哦...而且,在你的代碼中,你有一個bug。 你在中間的線路對你沒有任何幫助。 以下將正常工作:

string crypt = CryptSharp.Crypter.Sha512.GenerateSalt();
crypt = CryptSharp.Crypter.Sha512.Crypt(txtspss.Text.Trim(), crypt);

沒有足夠的代碼來說明究竟是什么問題,但你應該從使用結果開始

CryptSharp.Crypter.Sha512.GenerateSalt()

因為現在,您只需通過覆蓋以下行中的變量來轉儲它。

SHA512是一種哈希算法,為了使其更安全,可以抵御像彩虹表這樣的攻擊,庫方法可以選擇使用鹽值。

當散列和比較新值的散列時,應該存在相同的salt值,並且在您的代碼中,您似乎沒有這樣做。

注冊用戶時; Salt應存儲在數據庫中並在登錄時檢索,以便將其提供給CheckPassword函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM