當前位置:首頁 » 密碼管理 » 加密加鹽

加密加鹽

發布時間: 2022-05-01 06:26:50

A. java shiro加鹽之後怎麼反解密

hash函數是一種單向散列演算法,這意味著從明文可以得到散列值,而散列值不可以還原為明文。

驗證密碼的方法是將用戶輸入的密碼與鹽值按照加密時使用的hash演算法再hash一次,並與資料庫存儲的hash值作比較,若兩者一致則認為密碼正確。

B. MD5加鹽 加密密碼,客戶端發給後台的是明文嗎

一般md5加密都是不可逆的,所以都是講明文進行加密後對比資料庫存儲的密文

C. 加鹽密碼哈希:如何正確使用 (密碼加密的經典

t move it? I don't understand. In order to find out, I decided to continue digging the soil at its root. Digging and diggi

D. 如何安全的存儲用戶的密碼

保護密碼最好的的方式就是使用帶鹽的密碼hash(salted password hashing).對密碼進行hash操作是一件很簡單的事情,但是很多人都犯了錯。接下來我希望可以詳細的闡述如何恰當的對密碼進行hash,以及為什麼要這樣做。
重要提醒
如果你打算自己寫一段代碼來進行密碼hash,那麼趕緊停下吧。這樣太容易犯錯了。這個提醒適用於每一個人,不要自己寫密碼的hash演算法 !關於保存密碼的問題已經有了成熟的方案,那就是使用phpass或者本文提供的源碼
什麼是hash
hash("hello") =
hash("hbllo") =
hash("waltz") =

Hash演算法是一種單向的函數。它可以把任意數量的數據轉換成固定長度的「指紋」,這個過程是不可逆的。而且只要輸入發生改變,哪怕只有一個bit,輸出的hash值也會有很大不同。這種特性恰好合適用來用來保存密碼。因為我們希望使用一種不可逆的演算法來加密保存的密碼,同時又需要在用戶登陸的時候驗證密碼是否正確。
在一個使用hash的賬號系統中,用戶注冊和認證的大致流程如下:
1, 用戶創建自己的賬號
2, 用戶密碼經過hash操作之後存儲在資料庫中。沒有任何明文的密碼存儲在伺服器的硬碟上。
3, 用戶登陸的時候,將用戶輸入的密碼進行hash操作後與資料庫里保存的密碼hash值進行對比。
4, 如果hash值完全一樣,則認為用戶輸入的密碼是正確的。否則就認為用戶輸入了無效的密碼。
5, 每次用戶嘗試登陸的時候就重復步驟3和步驟4。

在步驟4的時候不要告訴用戶是賬號還是密碼錯了。只需要顯示一個通用的提示,比如賬號或密碼不正確就可以了。這樣可以防止攻擊者枚舉有效的用戶名。
還需要注意的是用來保護密碼的hash函數跟數據結構課上見過的hash函數不完全一樣。比如實現hash表的hash函數設計的目的是快速,但是不夠安全。只有加密hash函數(cryptographic hash functions)可以用來進行密碼的hash。這樣的函數有SHA256, SHA512, RipeMD, WHIRLPOOL等。
一個常見的觀念就是密碼經過hash之後存儲就安全了。這顯然是不正確的。有很多方式可以快速的從hash恢復明文的密碼。還記得那些md5破解網站吧,只需要提交一個hash,不到一秒鍾就能知道結果。顯然,單純的對密碼進行hash還是遠遠達不到我們的安全需求。下一部分先討論一下破解密碼hash,獲取明文常見的手段。
如何破解hash
字典和暴力破解攻擊(Dictionary and Brute Force Attacks)
最常見的破解hash手段就是猜測密碼。然後對每一個可能的密碼進行hash,對比需要破解的hash和猜測的密碼hash值,如果兩個值一樣,那麼之前猜測的密碼就是正確的密碼明文。猜測密碼攻擊常用的方式就是字典攻擊和暴力攻擊。
Dictionary Attack

Trying apple : failed
Trying blueberry : failed
Trying justinbeiber : failed
...
Trying letmein : failed
Trying s3cr3t : success!

字典攻擊是將常用的密碼,單詞,短語和其他可能用來做密碼的字元串放到一個文件中,然後對文件中的每一個詞進行hash,將這些hash與需要破解的密碼hash比較。這種方式的成功率取決於密碼字典的大小以及字典的是否合適。
Brute Force Attack

Trying aaaa : failed
Trying aaab : failed
Trying aaac : failed
...
Trying acdb : failed
Trying acdc : success!

暴力攻擊就是對於給定的密碼長度,嘗試每一種可能的字元組合。這種方式需要花費大量的計算機時間。但是理論上只要時間足夠,最後密碼一定能夠破解出來。只是如果密碼太長,破解花費的時間就會大到無法承受。
目前沒有方式可以阻止字典攻擊和暴力攻擊。只能想辦法讓它們變的低效。如果你的密碼hash系統設計的是安全的,那麼破解hash唯一的方式就是進行字典或者暴力攻擊了。
查表破解(Lookup Tables)
對於特定的hash類型,如果需要破解大量hash的話,查表是一種非常有效而且快速的方式。它的理念就是預先計算(pre-compute)出密碼字典中每一個密碼的hash。然後把hash和對應的密碼保存在一個表裡。一個設計良好的查詢表結構,即使存儲了數十億個hash,每秒鍾仍然可以查詢成百上千個hash。
如果你想感受下查表破解hash的話可以嘗試一下在CraskStation上破解下下面的sha256 hash。

反向查表破解(Reverse Lookup Tables)
Searching for hash(apple) in users' hash list... : Matches [alice3, 0bob0, charles8]
Searching for hash(blueberry) in users' hash list... : Matches [usr10101, timmy, john91]
Searching for hash(letmein) in users' hash list... : Matches [wilson10, dragonslayerX, joe1984]
Searching for hash(s3cr3t) in users' hash list... : Matches [bruce19, knuth1337, john87]
Searching for hash(z@29hjja) in users' hash list... : No users used this password

這種方式可以讓攻擊者不預先計算一個查詢表的情況下同時對大量hash進行字典和暴力破解攻擊。
首先,攻擊者會根據獲取到的資料庫數據製作一個用戶名和對應的hash表。然後將常見的字典密碼進行hash之後,跟這個表的hash進行對比,就可以知道用哪些用戶使用了這個密碼。這種攻擊方式很有效果,因為通常情況下很多用戶都會有使用相同的密碼。
彩虹表 (Rainbow Tables)
彩虹表是一種使用空間換取時間的技術。跟查表破解很相似。只是它犧牲了一些破解時間來達到更小的存儲空間的目的。因為彩虹表使用的存儲空間更小,所以單位空間就可以存儲更多的hash。彩虹表已經能夠破解8位長度的任意md5hash。彩虹表具體的原理可以參考http://www.project-rainbowcrack.com/
下一章節我們會討論一種叫做「鹽」(salting)的技術。通過這種技術可以讓查表和彩虹表的方式無法破解hash。
加鹽(Adding Salt)
hash("hello") =
hash("hello" + "QxLUF1bgIAdeQX") =
hash("hello" + "bv5PehSMfV11Cd") =
hash("hello" + "YYLmfY6IehjZMQ") =

查表和彩虹表的方式之所以有效是因為每一個密碼的都是通過同樣的方式來進行hash的。如果兩個用戶使用了同樣的密碼,那麼一定他們的密碼hash也一定相同。我們可以通過讓每一個hash隨機化,同一個密碼hash兩次,得到的不同的hash來避免這種攻擊。
具體的操作就是給密碼加一個隨即的前綴或者後綴,然後再進行hash。這個隨即的後綴或者前綴成為「鹽」。正如上面給出的例子一樣,通過加鹽,相同的密碼每次hash都是完全不一樣的字元串了。檢查用戶輸入的密碼是否正確的時候,我們也還需要這個鹽,所以鹽一般都是跟hash一起保存在資料庫里,或者作為hash字元串的一部分。
鹽不需要保密,只要鹽是隨機的話,查表,彩虹表都會失效。因為攻擊者無法事先知道鹽是什麼,也就沒有辦法預先計算出查詢表和彩虹表。如果每個用戶都是使用了不同的鹽,那麼反向查表攻擊也沒法成功。
下一節,我們會介紹一些鹽的常見的錯誤實現。
錯誤的方式:短的鹽和鹽的復用
最常見的錯誤實現就是一個鹽在多個hash中使用或者使用的鹽很短。
鹽的復用(Salt Reuse)
不管是將鹽硬編碼在程序里還是隨機一次生成的,在每一個密碼hash里使用相同的鹽會使這種防禦方法失效。因為相同的密碼hash兩次得到的結果還是相同的。攻擊者就可以使用反向查表的方式進行字典和暴力攻擊。只要在對字典中每一個密碼進行hash之前加上這個固定的鹽就可以了。如果是流行的程序的使用了硬編碼的鹽,那麼也可能出現針對這種程序的這個鹽的查詢表和彩虹表,從而實現快速破解hash。
用戶每次創建或者修改密碼一定要使用一個新的隨機的鹽
短的鹽
如果鹽的位數太短的話,攻擊者也可以預先製作針對所有可能的鹽的查詢表。比如,3位ASCII字元的鹽,一共有95x95x95 = 857,375種可能性。看起來好像很多。假如每一個鹽製作一個1MB的包含常見密碼的查詢表,857,375個鹽才是837GB。現在買個1TB的硬碟都只要幾百塊而已。
基於同樣的理由,千萬不要用用戶名做為鹽。雖然對於每一個用戶來說用戶名可能是不同的,但是用戶名是可預測的,並不是完全隨機的。攻擊者完全可以用常見的用戶名作為鹽來製作查詢表和彩虹表破解hash。
根據一些經驗得出來的規則就是鹽的大小要跟hash函數的輸出一致。比如,SHA256的輸出是256bits(32bytes),鹽的長度也應該是32個位元組的隨機數據。
錯誤的方式:雙重hash和古怪的hash函數
這一節討論另外一個常見的hash密碼的誤解:古怪的hash演算法組合。人們可能解決的將不同的hash函數組合在一起用可以讓數據更安全。但實際上,這種方式帶來的效果很微小。反而可能帶來一些互通性的問題,甚至有時候會讓hash更加的不安全。本文一開始就提到過,永遠不要嘗試自己寫hash演算法,要使用專家們設計的標准演算法。有些人會覺得通過使用多個hash函數可以降低計算hash的速度,從而增加破解的難度。通過減慢hash計算速度來防禦攻擊有更好的方法,這個下文會詳細介紹。
下面是一些網上找到的古怪的hash函數組合的樣例。
md5(sha1(password))
md5(md5(salt) + md5(password))
sha1(sha1(password))
sha1(str_rot13(password + salt))
md5(sha1(md5(md5(password) + sha1(password)) + md5(password)))

不要使用他們!
注意:這部分的內容其實是存在爭議的!我收到過大量郵件說組合hash函數是有意義的。因為如果攻擊者不知道我們用了哪個函數,就不可能事先計算出彩虹表,並且組合hash函數需要更多的計算時間。
攻擊者如果不知道hash演算法的話自然是無法破解hash的。但是考慮到Kerckhoffs』s principle,攻擊者通常都是能夠接觸到源碼的(尤其是免費軟體和開源軟體)。通過一些目標系統的密碼–hash對應關系來逆向出演算法也不是非常困難。
如果你想使用一個標準的」古怪」的hash函數,比如HMAC,是可以的。但是如果你的目的是想減慢hash的計算速度,那麼可以讀一下後面討論的慢速hash函數部分。基於上面討論的因素,最好的做法是使用標準的經過嚴格測試的hash演算法。
hash碰撞(Hash Collisions)
因為hash函數是將任意數量的數據映射成一個固定長度的字元串,所以一定存在不同的輸入經過hash之後變成相同的字元串的情況。加密hash函數(Cryptographic hash function)在設計的時候希望使這種碰撞攻擊實現起來成本難以置信的高。但時不時的就有密碼學家發現快速實現hash碰撞的方法。最近的一個例子就是MD5,它的碰撞攻擊已經實現了。
碰撞攻擊是找到另外一個跟原密碼不一樣,但是具有相同hash的字元串。但是,即使在相對弱的hash演算法,比如MD5,要實現碰撞攻擊也需要大量的算力(computing power),所以在實際使用中偶然出現hash碰撞的情況幾乎不太可能。一個使用加鹽MD5的密碼hash在實際使用中跟使用其他演算法比如SHA256一樣安全。不過如果可以的話,使用更安全的hash函數,比如SHA256, SHA512, RipeMD, WHIRLPOOL等是更好的選擇。
正確的方式:如何恰當的進行hash
這部分會詳細討論如何恰當的進行密碼hash。第一個章節是最基礎的,這章節的內容是必須的。後面一個章節是闡述如何繼續增強安全性,讓hash破解變得異常困難。
基礎:使用加鹽hash
我們已經知道惡意黑客可以通過查表和彩虹表的方式快速的獲得hash對應的明文密碼,我們也知道了通過使用隨機的鹽可以解決這個問題。但是我們怎麼生成鹽,怎麼在hash的過程中使用鹽呢?
鹽要使用密碼學上可靠安全的偽隨機數生成器(Cryptographically Secure Pseudo-Random Number Generator (CSPRNG))來產生。CSPRNG跟普通的偽隨機數生成器比如C語言中的rand(),有很大不同。正如它的名字說明的那樣,CSPRNG提供一個高標準的隨機數,是完全無法預測的。我們不希望我們的鹽能夠被預測到,所以一定要使用CSPRNG。

E. 請教一下QQ登錄中對密碼的加密鹽值是怎麼處理的,是md5 64位加密,但不知道鹽值是怎麼弄的。

一般web中sha,md5 加密演算法,鹽值為登錄名: password=DigestUtils.md5Hex(name+pwd);

F. md5 為什麼 加鹽

原因:鹽被稱作「Salt值」,這個值是由系統隨機生成的,並且只有系統知道。即便兩個用戶使用了同一個密碼,由於系統為它們生成的salt值不同,散列值也是不同的。

MD5演算法的原理可簡要的敘述為:MD5碼以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位散列值。

(6)加密加鹽擴展閱讀:

MD5相對MD4所作的改進:

1、增加了第四輪。

2、每一步均有唯一的加法常數。

3、減弱第二輪中函數的對稱性。

4、第一步加上了上一步的結果,這將引起更快的雪崩效應(就是對明文或者密鑰改變 1bit 都會引起密文的巨大不同)。

5、改變了第二輪和第三輪中訪問消息子分組的次序,使其更不相似。

6、近似優化了每一輪中的循環左移位移量以實現更快的雪崩效應,各輪的位移量互不相同。

G. shiro資料庫中的密碼為明文,shiro中加上鹽值有什麼用

你可以這樣理解,加密的時候,增加加密的復雜度。

推薦一套完整的Shiro Demo,免費的。

Shiro介紹文檔:http://www.sojson.com/shiro
Demo已經部署到線上,地址是http://shiro.itboy.net


管理員帳號:admin,密碼:sojson.com 如果密碼錯誤,請用sojson。PS:你可以注冊自己的帳號,然後用管理員賦許可權給你自己的帳號,但是,每20分鍾會把數據初始化一次。建議自己下載源碼,讓Demo跑起來,然後跑的更快。

H. 求教nodejs怎麼對密碼進行加鹽的hash加密

以前java項目最近打算用node.js重寫,但是加密這里實在沒搞定。java中加密是:1024次加鹽sha-1加密,
一個例子:salt:47998d63768aa877,密文:,明文:yunstudio2013
下面是java代碼:
private static byte[] digest(byte[] input, String algorithm, byte[] salt, int iterations) {
try {
MessageDigest digest = MessageDigest.getInstance(algorithm);
if (salt != null) {
digest.update(salt);
}
byte[] result = digest.digest(input);
for (int i = 1; i < iterations; i++) {
digest.reset();
result = digest.digest(result);
}
return result;
} catch (GeneralSecurityException e) {
throw Exceptions.unchecked(e);
}
}
我在js裡面是這么乾的,但是結果一直不對,代碼如下:
//
var hash = crypto.createHmac("sha1", 「47998d63768aa877」).update(「yunstudio2013」).digest(「hex」);
for (var i = 1; i < 1024; i++) {
hash = crypto.createHmac("sha1", 「47998d63768aa877」).update(hash).digest(「hex」);
console.log(hash);
}

I. 如何使用model給密碼加鹽

如果是TP-Link無線路由,請按以下步驟修改無線密碼 註:請看完全文再進行操作,操作前請備好網線,防止無線設備(指電腦)無法訪問路由器,Intel的無線設備(即迅馳)請誤將軟體驅動升級至10.1.1.3以上版本,否則TP-Link將無法識別,經本人診斷已確定是TP-Link的Bug已提交,但沒有技術人員回復。 路由器部分設置:(路由器地址及訪問密碼只提供默認值請自行替換自己設置的值) 1.打開瀏覽器在地址欄輸入192.168.1.1回車彈出密碼提示窗 2.在密碼提示窗輸入用戶名和密碼(默認都為admin,如有出入在路由器下面應該已給出相應值)並按確定。此時彈出設置向導並打開設置界面兩張網頁,設置向導可以關閉,接下來進入具體無線設置部分 3.單擊左面列表的「無線參數」進入「無線網路基本設置」頁面 4.在右頁面可以看見一些基本參數 SSID號可以填入自己喜歡的名字也可不作修改,修改目的是便於在無線設備設置時與別人的無線路由進行區分頻段在周圍有多個無線路由時修改(一般相對於別人路由頻段+-3進行設置,不建議使用13頻段,因為部分帶wifi功能的手機或PDA無法識別該頻段) 確定開啟無線功能;開啟安全設置已打鉤(允許SSID廣播建議初級玩家打勾

J. ASP.NET實現對輸入的密碼用MD5+鹽,並加密

public partial class _Default : System.Web.UI.Page
{
public bool IsMd5
{
get
{
//添加命名空間 using System.Configuration;
return ConfigurationManager.AppSettings["Md5"] == "1";
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (IsMd5)
{
//添加命名空間 using System.Web.Security;
string MD5 = FormsAuthentication.("被加密的欄位", "MD5"); // SHA1 MD5
}
}
}
---------------------web.config----------------------------------
<appSettings>
<!--加密, 1:代表是; 0:代表不是-->
<add key="Md5" value="1"/>
</appSettings>

熱點內容
恆波u盤加密器 發布:2025-05-10 06:55:24 瀏覽:440
伺服器ip需要解析嗎 發布:2025-05-10 06:54:26 瀏覽:425
編譯型語言的執行速度 發布:2025-05-10 06:53:43 瀏覽:217
免費開我的世界國際服伺服器 發布:2025-05-10 06:51:35 瀏覽:274
壓縮機拍賣 發布:2025-05-10 06:50:04 瀏覽:838
伺服器映射器怎麼固定ip 發布:2025-05-10 06:35:31 瀏覽:637
藍牙鍵盤如何輸入電腦密碼 發布:2025-05-10 06:32:33 瀏覽:275
北京php培訓機構 發布:2025-05-10 06:28:20 瀏覽:879
php在線狀態 發布:2025-05-10 06:22:23 瀏覽:260
加密技術的優缺點 發布:2025-05-10 06:22:18 瀏覽:527