bcrypt,是一個跨平台的文件加密工具。由它加密的文件可在所有支持的操作系統和處理器上進行轉移。它的口令必須是8至56個字元,並將在內部被轉化為448位的密鑰。
Hash,一般翻譯做「散列」,也有直接音譯為「哈希」的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
Ⅱ 各位用php將密碼存入資料庫,都用什麼方法進行加密的
php將密碼存入資料庫,可以分內常見的4種方式:
1、直接md5加密存到到資料庫
2、md5兩次存到資料庫
3、對需要加密的字元串和一個常量 進行混淆加密
4、生成一個隨機的變數存到資料庫中,然後對需要加密的字元串和這個隨機變數加密
<?php
$str="admin";//需要加密的字元串
$str2="php";//增加一個常量混淆
$pass1=md5($str);
$pass2=md5(md5($str));
$pass3=md5($str.$str2);
echo$pass1."<br>".$pass2."<br>".$pass3;
?>
輸出:
$str="admin";//需要加密的字元串
$encrypt=$row['encrypt'];//生成的隨機加密字元串存到資料庫中
$pass4=md5($str.$encrypt);
//
Ⅲ PBKDF2的與其他加密演算法比較
bcrypt是專門為密碼存儲而設計的演算法,基於Blowfish加密演算法變形而來,由Niels Provos和David Mazières發表於1999年的USENIX。
bcrypt最大的好處是有一個參數(work factor),可用於調整計算強度,而且work factor是包括在輸出的摘要中的。隨著攻擊者計算能力的提高,使用者可以逐步增大work factor,而且不會影響已有用戶的登陸。
bcrypt經過了很多安全專家的仔細分析,使用在以安全著稱的OpenBSD中,一般認為它比PBKDF2更能承受隨著計算能力加強而帶來的風險。bcrypt也有廣泛的函數庫支持,因此我們建議使用這種方式存儲密碼。 scrypt是由著名的FreeBSD黑客 Colin Percival為他的備份服務 Tarsnap開發的。
和上述兩種方案不同,scrypt不僅計算所需時間長,而且佔用的內存也多,使得並行計算多個摘要異常困難,因此利用rainbow table進行暴力攻擊更加困難。scrypt沒有在生產環境中大規模應用,並且缺乏仔細的審察和廣泛的函數庫支持。但是,scrypt在演算法層面只要沒有破綻,它的安全性應該高於PBKDF2和bcrypt。
Ⅳ bcrypt同一個密碼生成的hash值是一樣的嗎
MD5消息摘要演算法(MD5 Message-Digest Algorithm)是一種廣泛使用的加密 Hash 函數,主要用於生成一個128bit(16byte) Hash 值。它的實現思路非常簡單且易懂,其最基本的思路是將可變長度的數據集映射為固定長度的數據集。
Ⅳ PHP中哪種加密方式好
aes/des加密速度快,適合大量數據,des容易破解,一般用3重des,後來又出現了更快更安全的aes
rsa是公鑰加密,速度慢,只能處理少量數據,優點是公鑰即使在不安全的網路上公開,也能保證安全
常見情況是雙方用rsa協商出一個密鑰後通過aes/3des給數據加密。
bcrypt,是一個跨平台的文件加密工具。由它加密的文件可在所有支持的操作系統和處理器上進行轉移。它的口令必須是8至56個字元,並將在內部被轉化為448位的密鑰。
綜上所述用bcrypt還是好點,最好用md5安全性高,更多問題到後盾網論壇問題助專區http://bbs.hounwang.com/
Ⅵ Laravel 5.2 默認的密碼加密,怎麼加點鹽
查看這部分的源代碼可得,
// Laravel 的 bcrypt 就是
$hash = password_hash($value, PASSWORD_BCRYPT, ['cost' => 10]);
因為 password_hash 使用的是 crypt 演算法, 因此參與計算 hash值的:
演算法(就像身份證開頭能知道省份一樣, 由鹽值的格式決定), cost(默認10) 和 鹽值 是在$hash中可以直接看出來的!
所以說, Laravel 中bcrypt的鹽值是PHP自動隨機生成的字元, 雖然同一個密碼每次計算的hash不一樣.
但是通過 $hash 和 密碼, 卻可以驗證密碼的正確性!
具體來說, 比如這個
$hash = password_hash('password',PASSWORD_BCRYPT,['cost' => 10]);
echo $hash;
// 比如我這次算的是
// $hash = '$2y$10$';
那麼我們從這個 crypt的hash值中可以看到,
因為以$2y$開頭, 所以它的演算法是 CRYPT_BLOWFISH .
同時 CRYPT_BLOWFISH 演算法鹽值格式規定是 :
以$2y$開頭 + 一個兩位cost參數 + $ + 22位隨機字元("./0-9A-Za-z")
$hash(CRYPT_BLOWFISH是固定60位) = 鹽值 + 31位單向加密後的值
Ⅶ 如何安全保存密碼
過去一段時間來,眾多的網站遭遇用戶密碼資料庫泄露事件,這甚至包括頂級的互聯網企業–NASDQ上市的商務社交網路Linkedin,國內諸如CSDN一類的就更多了。
層出不窮的類似事件對用戶會造成巨大的影響,因為人們往往習慣在不同網站使用相同的密碼,一家「暴庫」,全部遭殃。
那麼在選擇密碼存儲方案時,容易掉入哪些陷阱,以及如何避免這些陷阱?我們將在實踐中的一些心得體會記錄於此,與大家分享。
菜鳥方案:
直接存儲用戶密碼的明文或者將密碼加密存儲。
曾經有一次我在某知名網站重置密碼,結果郵件中居然直接包含以前設置過的密碼。我和客服咨詢為什麼直接將密碼發送給用戶,客服答曰:「減少用戶步驟,用戶體驗更好」;再問「管理員是否可以直接獲知我的密碼」, 客服振振有詞:「我們用XXX演算法加密過的,不會有問題的」。 殊不知,密碼加密後一定能被解密獲得原始密碼,因此,該網站一旦資料庫泄露,所有用戶的密碼本身就大白於天下。
以後看到這類網站,大家最好都繞道而走,因為一家「暴庫」,全部遭殃。
入門方案:
將明文密碼做單向哈希後存儲。
單向哈希演算法有一個特性,無法通過哈希後的摘要(digest)恢復原始數據,這也是「單向」二字的來源,這一點和所有的加密演算法都不同。常用的單向哈希演算法包括SHA-256,SHA-1,MD5等。例如,對密碼「passwordhunter」進行SHA-256哈希後的摘要(digest)如下:
「」
可能是「單向」二字有誤導性,也可能是上面那串數字唬人,不少人誤以為這種方式很可靠, 其實不然。
單向哈希有兩個特性:
1)從同一個密碼進行單向哈希,得到的總是唯一確定的摘要
2)計算速度快。隨著技術進步,尤其是顯卡在高性能計算中的普及,一秒鍾能夠完成數十億次單向哈希計算
結合上面兩個特點,考慮到多數人所使用的密碼為常見的組合,攻擊者可以將所有密碼的常見組合進行單向哈希,得到一個摘要組合,然後與資料庫中的摘要進行比對即可獲得對應的密碼。這個摘要組合也被稱為rainbow table。
更糟糕的是,一個攻擊者只要建立上述的rainbow table,可以匹配所有的密碼資料庫。仍然等同於一家「暴庫」,全部遭殃。以後要是有某家廠商宣布「我們的密碼都是哈希後存儲的,絕對安全」,大家對這個行為要特別警惕並表示不屑。有興趣的朋友可以搜索下,看看哪家廠商躺著中槍了。
進階方案:
將明文密碼混入「隨機因素」,然後進行單向哈希後存儲,也就是所謂的「Salted Hash」。
這個方式相比上面的方案,最大的好處是針對每一個資料庫中的密碼,都需要建立一個完整的rainbow table進行匹配。 因為兩個同樣使用「passwordhunter」作為密碼的賬戶,在資料庫中存儲的摘要完全不同。
10多年以前,因為計算和內存大小的限制,這個方案還是足夠安全的,因為攻擊者沒有足夠的資源建立這么多的rainbow table。 但是,在今日,因為顯卡的恐怖的並行計算能力,這種攻擊已經完全可行。
專家方案:
故意增加密碼計算所需耗費的資源和時間,使得任何人都不可獲得足夠的資源建立所需的rainbow table。
這類方案有一個特點,演算法中都有個因子,用於指明計算密碼摘要所需要的資源和時間,也就是計算強度。計算強度越大,攻擊者建立rainbow table越困難,以至於不可繼續。
這類方案的常用演算法有三種:
1)PBKDF2(Password-Based Key Derivation Function)
PBKDF2簡單而言就是將salted hash進行多次重復計算,這個次數是可選擇的。如果計算一次所需要的時間是1微秒,那麼計算1百萬次就需要1秒鍾。假如攻擊一個密碼所需的rainbow table有1千萬條,建立所對應的rainbow table所需要的時間就是115天。這個代價足以讓大部分的攻擊者忘而生畏。
美國政府機構已經將這個方法標准化,並且用於一些政府和軍方的系統。 這個方案最大的優點是標准化,實現容易同時採用了久經考驗的SHA演算法。
2) bcrypt
bcrypt是專門為密碼存儲而設計的演算法,基於Blowfish加密演算法變形而來,由Niels Provos和David Mazières發表於1999年的USENIX。
bcrypt最大的好處是有一個參數(work factor),可用於調整計算強度,而且work factor是包括在輸出的摘要中的。隨著攻擊者計算能力的提高,使用者可以逐步增大work factor,而且不會影響已有用戶的登陸。
bcrypt經過了很多安全專家的仔細分析,使用在以安全著稱的OpenBSD中,一般認為它比PBKDF2更能承受隨著計算能力加強而帶來的風險。bcrypt也有廣泛的函數庫支持,因此我們建議使用這種方式存儲密碼。
3) scrypt
scrypt是由著名的FreeBSD黑客 Colin Percival為他的備份服務 Tarsnap開發的。
和上述兩種方案不同,scrypt不僅計算所需時間長,而且佔用的內存也多,使得並行計算多個摘要異常困難,因此利用rainbow table進行暴力攻擊更加困難。scrypt沒有在生產環境中大規模應用,並且缺乏仔細的審察和廣泛的函數庫支持。但是,scrypt在演算法層面只要沒有破綻,它的安全性應該高於PBKDF2和bcrypt。
來源:堅果雲投稿,堅果雲是一款類似Dropbox的雲存儲服務,可以自動同步、備份文件。
Ⅷ Web前端密碼加密是否有意義
密碼在前端加密完全沒有意義,對密碼系統的安全性不會有任何提高,反而會引發不必要的麻煩。首先,做前端開發的人需要知道,前端系統的控制權是完全在用戶手裡的,也就是說,前端做什麼事情,用戶有完全的控制權。假設如同 @陳軒所說,前端做過了md5,後台就不用做了,這個做法會有什麼後果?如果某一天,這個系統的資料庫泄露了,黑客就直接拿到了每個用戶的密碼md5值,但此時,由於黑客知道密碼是在前端進行哈希的,所以他不需要爆破出該md5對應的原文是什麼,而是直接修改客戶端向伺服器發出的請求,把密碼欄位換成資料庫中MD5就可以了,由於與資料庫中記錄一致,直接就會登錄成功。這跟直接存儲明文密碼沒有任何區別!!!所以不管前端是不是加密了密碼,後台使用安全的哈希演算法對內容再次轉換是非常有必要的。(MD5可不行,要用bcrypt,我之前回答過一個類似的:隨著顯卡性能的高速發展,目前的快速Hash演算法是否已經變得不夠安全了?)這個回答還有一個人贊同,希望大家別被錯誤答案誤導了。另外一個答案 @林鴻所說,在非安全HTTP連接上,可以防止原始密碼被竊聽。但問題在於由於你的登錄系統接受的哈希過的密碼,而不是原文,竊聽者根本不需要原始密碼,只要通過哈希結果就可以偽造請求登錄系統。這樣做只能防止被竊聽到原文的密碼被攻擊者用在社會學攻擊上,而不能改善該網站的安全性。所以不管前端是不是加密了密碼,使用HTTPS安全連接進行登錄都是非常有必要的。以上我說的兩點,合起來看就是:不管前端是否加密了密碼,都不能以此為假設,讓後端設計的安全等級下降,否則就會有嚴重的安全問題。實際上,前端進行密碼加密,可以看做幫助用戶多進行了一次原文的轉換,不管用了什麼加密演算法,算出來的結果都是密碼原文,你該如何保護用戶的原始密碼,就該如何保護此處的加密結果,因為對你的登錄系統來說,它們都是密碼原文。以上這些,說明了密碼加密是沒有什麼意義的,接下來,我要說明前端加密會帶來什麼問題。有些人會認為前端進行了加密,可以降低後台的安全性需求,這種錯誤的觀念會造成系統的安全漏洞。實際上,你不能對前端做任何的假設,所有跟安全相關的技術,都必須應用在後台上。前端進行加密會造成頁面需要js腳本才能運行,那麼假設你的系統需要兼容不能運行js的客戶端,就必須再設計一個使用原文的登錄介面。由於前端是不是加密,所有安全機制都必須照常應用,所以為系統增加這樣的復雜性是完全沒必要的,即使傳輸明文密碼,只要正確使用了HTTPS連接和伺服器端安全的哈希演算法,密碼系統都可以是很安全的。
Ⅸ yy登錄顯示密碼加密
輸入加密密碼。
用戶密碼加密方式:
1、明文保存比如用戶設置的密碼是「123456」,直接將「123456」保存在資料庫中,這種是最簡單的保存方式,也是最不安全的方式。但實際上不少互聯網公司,都可能採取的是這種方式。
2、對稱加密演算法來保存比如3DES、AES等演算法,使用這種方式加密是可以通過解密來還原出原始密碼的,當然前提條件是需要獲取到密鑰。不過既然大量的用戶信息已經泄露了,密鑰很可能也會泄露,當然可以將一般數據和密鑰分開存儲、分開管理,但要完全保護好密鑰也是一件非常復雜的事情,所以這種方式並不是很好的方式。
3、MD5、SHA1等單向HASH演算法使用這些演算法後,無法通過計算還原出原始密碼,而且實現比較簡單,隨著彩虹表技術的興起,可以建立彩虹表進行查表破解,目前這種方式已經很不安全了。
4、PBKDF2演算法該演算法原理大致相當於在HASH演算法基礎上增加隨機鹽,並進行多次HASH運算,隨機鹽使得彩虹表的建表難度大幅增加,而多次HASH也使得建表和破解的難度都大幅增加。
5、bcrypt、scrypt等演算法這兩種演算法也可以有效抵禦彩虹表,使用這兩種演算法時也需要指定相應的參數,使破解難度增加。
Ⅹ 密碼加密的方法有那些
用戶密碼加密方式
用戶密碼保存到資料庫時,常見的加密方式有哪些?以下幾種方式是常見的密碼保存方式:
1. 明文保存
比如用戶設置的密碼是「123456」,直接將「123456」保存在資料庫中,這種是最簡單的保存方式,也是最不安全的方式。但實際上不少互聯網公司,都可能採取的是這種方式。
2. 對稱加密演算法來保存
比如3DES、AES等演算法,使用這種方式加密是可以通過解密來還原出原始密碼的,當然前提條件是需要獲取到密鑰。不過既然大量的用戶信息已經泄露了,密鑰很可能也會泄露,當然可以將一般數據和密鑰分開存儲、分開管理,但要完全保護好密鑰也是一件非常復雜的事情,所以這種方式並不是很好的方式。
總結
採用PBKDF2、bcrypt、scrypt等演算法可以有效抵禦彩虹表攻擊,即使數據泄露,最關鍵的「用戶密碼」仍然可以得到有效的保護,黑客無法大批量破解用戶密碼,從而切斷撞庫掃號的根源。
【加密軟體編輯推薦】
易控網盾加密軟體--重要文件防泄密專家!輕松實現單位內部文件自動加密保護,加密後的文件在單位內部正常流轉使用。未經許可,任何私自拷貝加密文件外發出去,都將打開為亂碼,無法使用!對於發送給客戶等第三方的文件,可實現控制打開時間和打開次數等防泄密參數!同時可設置對員工電腦文件自動備份,防止惡意刪除造成核心數據的遺失!從源頭防止企業核心文件被外泄!
相關頁面:加密軟體,文件加密,文檔加密,圖紙加密軟體,防泄密軟體,CAD加密軟體,文件外發加密