當前位置:首頁 » 密碼管理 » 傳遞密碼怎麼用
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

傳遞密碼怎麼用

發布時間: 2022-06-30 08:32:34

『壹』 如何用郵件安全地傳遞密碼

挖人無情人千萬人確認

『貳』 間諜情報運用密碼進行傳遞通訊的方法有哪五種

一是陰符、陰書。東漢許慎《說文解字》對"符"的釋義是:"符,信也......分而相合。"《孫子兵法·九地篇》已指出"夷關折符",曹操與杜牧分別注道:"謀定,則閉關以絕其符信,勿通其使","夷關折符者,不令國人出入。蓋恐敵人有間使潛來,或藏形隱跡,由危歷險,或竊符盜信,假託姓名,而來窺我也。"陰符是刻畫有特殊符號或製成不規則牙狀邊緣的信物憑證,其作用為傳遞情報,調兵遣將。《六韜·陰符第二十四》有專章論述古代陰符的密碼:"主與將有陰符凡八等:有大勝克敵之符,長一尺。破軍擒將之符,長九寸。降城得邑之符,長八寸。卻敵報遠之符,長七寸。警眾堅守之符,長六寸。請糧益兵之符,長五寸。敗軍亡將之符,長四寸。失利亡士之符,長三寸。諸奉使行符,稽留者,若符事泄,聞者、告者皆誅之。八符者,主將秘聞。所以陰通言語不泄中外相知之術,敵雖聖智,莫之能識。"

這種由主將事先暗自規定尺寸長短的陰符,其所代表的"言語"就是一種情報密碼。陰符有銅制、玉制、木製、竹製等。陰符也可以作為一種臨時的特殊通行證。《墨子·號令第七十》中說:"有分守者,大將必與為信符。大將使人行守,操信符,信符不合及號不相應者,伯長以上輒止之,以聞大將。"一般銅符是為傳遞情報調動部隊之用;木、竹符為特使"出入征險"通行之用。譬如戰國信陵君派女間諜如姬竊取魏王銅符,然後"矯魏王令代晉鄙",奪兵權而救趙國。楚懷王發給鄂君竹符,遣其巡歷長江沿岸。

陰書是比陰符更進一步的情報傳遞密碼。《六韜·陰書第二十五》也有專章論述:"武王問太公曰:其事煩多,符不能明,相去遼遠,言語不通;為之奈何?太公曰:諸有陰事大慮當用書不用符。主以書遣將,將以書問主,書皆一合而再離,三發而一知。再離者分書為三部;三發而一知者,言三人,人操一分,相參而不相知情也。此謂陰書。敵總聖智,莫之能識。"所謂"一合而再離",即將一份完整的情報截成三份,分寫在三枚竹簡上;所謂"三發而一知",即派三個人分別持此三枚竹簡,分別出發,到達目的地後,再將三枚竹簡合而為一,便能讀通其意義了。這樣,送情報的人互不得知傳送情報的內容,即使有一人或二人被敵方捕獲,也不會泄密。

二是暗號。以暗號互通信息或傳遞情報,古已有之。記之較詳的是明代無名氏兵書《草廬經略·軍號》:"軍營有夜號也,恃以防奸也。或以物,或以字暮夜往來邏軍,必低聲詢問,不知號者,必奸細也。號須記載,以便稽查,毋得重復,亦勿有心,恐有心則為人所覺,而重復則雷同,尤使敵易測也。營外巡視,伏路之軍,亦別有號,盤詰外奸,使無所容。先發外號,遣之使出,始發內號,勿令預聞,恐敵擒獲因而泄露也。"

"路符"也是一種秘密暗號。譬如在某人必經途中,在泥土上畫一個大圓圈,表示前面有人接頭;畫一條蛇,表示執行任務時有人協助;畫五個並排三角形,表示將進行刺殺行動。

"體態語"有多種多樣,有手勢語、身勢語、情態語等。譬如遇有緊急情況,則舉扇過頭,輕搖三下,表示招人參加戰事;又如把右手拇指握在其餘四指之外,放在頭上,則表示"處境危險,緊急求助"的含意。

此外,還有一種以物品讀音的諧聲來作為一種情報暗號。譬如北宋種世衡派間諜法崧前往西夏進行反間,"遣法崧以棗及畫龜為書置蠟丸中,遺旺榮,喻以'早'、'歸'之意"。"棗"諧"早"音,"龜"諧"歸"音。這一類傳遞情報的暗號需事先約定,但它與陰符一樣,所容納的信息量很小,因此所傳遞的情報內容也就很有限了。

三是字驗。宋仁宗時詔令天章閣待制曾公亮編撰的《武經總要》卷十五曾詳細記載了這一情報通訊方法。所謂"字驗",即將各種情報用四十字的一首詩中的一些字來表示。具體要求是:所選的詩不得有重復之字,詩中的每一個字依次表示某一情報。如需報告某一情報,便在詩中規定的某一個字下加上一個符號即可。對方收到後,只需查對密碼本即可譯出情報內容。譬如《武經總要》記載道:先將軍中聯絡的有關情報編為四十項,即:請弓、請箭、請刀、請甲、請槍旗、請鍋幕、請馬、請衣賜、請糧料、請草料、請牛車、請船、請攻城守具、請添兵、請移營、請進軍、請退軍、請固守、未見賊、見賊訖、賊多、賊少、賊相敵、賊添兵、賊移營、賊進兵、賊退軍、賊固守、圍得賊城、解圍城、被賊圍、賊圍解、戰不勝、戰大勝、戰大捷、將土投降、將士叛、士卒病、都將病、戰小勝。

如果出現了四十項中的某一項或幾項的情況,則書寫一首五言律詩(五字一句,共八句,正好四十個字),按四十項的次序,用一個記號寫在五言律詩的第幾個字下即可。譬如出現了"被賊圍"的情況,按四十項的次序是第三十一項,於是隨意寫一首五言律詩,譬如用白居易的《賦得古原草送別》一詩:"離離原上草,一歲一枯榮。野火燒不盡,春風吹又生。遠芳侵古道,晴翠接荒城。又送王孫去,萋萋滿別情。"然後在這首詩的第三十一個字"又送王孫去"的"又"字下加個記號,即表示"被賊圍"的情報。

四是反切密碼。這是明代名將戚繼光所發明創制。它是用古代反切的注音方法來編制密碼。反切注音方法為:用兩個字拼合成另一個字的音。即取反切上字的聲母和反切下字的韻母及聲調,切出所需注釋字的字音。譬如要注"諜"這個字音,則用"得斜"兩個字來注音,即取"得"字的聲母"d";取"斜"字的韻母"ie"及"斜"宇的聲調,拼切成dié音,就是"諜"的字音。

反切密碼法利用反切的原理編了兩首歌:

柳邊求氣低,波他爭日時。鶯蒙語出喜,打掌與君知。

用這首歌的前十五個字作為不同聲母的代表字。即柳字代表"1";邊字代表"b",以下依次類推(注意:古字的讀音有些與現代漢語讀音不同)。

另一首歌是:

春花香,秋山開,嘉賓歡歌須金杯,孤燈光輝燒銀缸。之東郊,過西橋,雞聲催初天,奇梅歪遮溝。

用這首歌的三十六個字作為不同韻母的代表字(注意:其中的金與賓、梅與杯、遮與奇的韻母相同,實際上只有三十三個不同韻母的代表字)。

然後將十五個聲母代表字和三十六個韻母代表字按次編上號碼,再將當時字音的八個聲調也按順序編上號碼。這就形成了傳遞情報的反切密碼,可以用此注出任何字的讀音。戚繼光由此還編了一本《八音字義便覽》來作為教材,進行專門訓練。

五是明碼加密。清末時,電報技術輸入中國。1871年由上海大北水線電報公司,選用了六千八百九十七個漢字,代以四碼數字,編成中國最早的電報明碼本。但是為了保密,又設計了將明碼本加密的方法,形成了較復雜的密碼。這一密碼被清末軍事及商業情報機構使用,傳遞發送了眾多方面的間諜情報。

明碼加密的具體方法是:譬如"布"這個字的電報電碼為1530,加密和減密的鑰匙均為9853。先用明碼的四個數字分別與加密鑰匙的四個數字相加:1加9為"10",凡"10"都作"0";5加8為"13",須隱去"10",只作"3";3加5為"8";0(看作"10")加3為"13",須隱去"10",只作3。那麼"布"的明碼1530就成了密碼0383。接收到這四個密碼後,再以此減去解密鑰匙的四個數字,即:0(看作"10")減9為"1";3(看作前已隱去的"10"再加上3為13)減8為"5";8減5為"3";3減3為"0",解密後的數字為1530,又回到明碼上去了。

『叄』 jsp 怎麼傳遞加密後的賬號密碼

你這個login,jsp裡面form發送一個post請求給action多好,action裡面調用資料庫,然後從資料庫裡面找和用戶名匹配的數據,找到了,在判斷密碼,是和就是這個用戶所用的密碼,應該在資料庫里一一對應吧。就這些吧。判斷用戶和賬號為空什麼的寫個js腳本判斷一下

『肆』 摩斯密碼是什麼,用手敲打就能傳遞信息

就是 滴 答 的兩種聲音 每個字母都有對應的表達方式~ 這個很古老了~~ 專業的人才能聽出來~

『伍』 PHP中如何利用session傳遞賬號密碼

a.php
<?php
if(session_id($_GET['sid'])){
session_id('sid');//如url中有sessionid,那麼取出給了session,如果沒有,讓下面的 session_start來從cookie中獲取,如cookie中也沒有,那麼就創建
但是上面的寫法就不合適了.
}
session_start();
$_SESSION['username']='aaaa';
?>
b.php
<?php
if(session_id($_GET['sid'])){
session_id('sid');//如url中有sessionid,那麼取出給了session,如果沒有,讓下面的 session_start來從cookie中獲取,如cookie中也沒有,那麼就創建
但是上面的寫法就不合適了.
}
session_start();
echo $_SESSION['username'];

?>
注意,先執行a.php然後執行b.php,並且必須在同一個瀏覽器執行。

『陸』 如何在 SQL Server 實例之間傳輸登錄和密碼

有關此過程的更多信息,請參見 SQL Server 聯機叢書中的「sp_addlogin (T-SQL)」主題。
默認情況下,只有 sysadminfixed 伺服器角色的成員可以從 sysxlogins 表中進行選擇。除非 sysadmin 角色的成員授予了必要的許可權,否則最終用戶將無法創建或運行這些存儲過程。
此方法不會嘗試傳輸特定登錄的默認資料庫信息,因為默認資料庫並不始終存在於目標伺服器中。要為某個登錄定義默認資料庫,您可以使用 sp_defaultdb 系統存儲過程,方法是將登錄名和默認資料庫作為參數傳遞給該過程。有關使用此過程的更多信息,請參見 SQL Server 聯機叢書中的「sp_defaultdb」主題。
在 SQL Server 實例之間傳輸登錄的過程中,如果源伺服器的排序順序不區分大小寫,而目標伺服器的排序順序區分大小寫,則在將登錄傳輸到目標伺服器後,必須以大寫形式輸入密碼中的所有字母字元。如果源伺服器的排序順序區分大小寫,而目標伺服器的排序順序不區分大小寫,則無法通過本文所述的步驟使用已傳輸的登錄進行登錄,除非原始密碼不包括字母字元或原始密碼中的所有字母字元都是大寫字元。如果兩個伺服器都區分大小寫或者都不區分大小寫,則不會出現此問題。這是 SQL Server 處理密碼的方式所帶來的副作用。有關更多信息,請參見 SQL Server 7.0 聯機叢書中的「Effect on Passwords of Changing Sort Orders」(更改排序順序對密碼的影響)主題。
在目標伺服器上運行「sp_help_revlogin」腳本的輸出時,如果該目標伺服器已經定義了一個登錄,且該登錄名與腳本輸出中的某個登錄名相同,則在執行「sp_help_revlogin」腳本的輸出時,可能會看到下面的錯誤:
Server:Msg15025,Level16,State1,Proceresp_addlogin,Line56
Thelogin'test1'alreadyexists.
同樣,如果此伺服器上存在其他登錄,且其 SID 值與您要嘗試添加的登錄的 SID 值相同,則會收到以下錯誤消息:
Server:Msg15433,Level16,State1,Proceresp_addlogin,Line93
Suppliedparameter@sidisinuse.
因此,您必須仔細復查這些命令的輸出,檢查 sysxlogins 表的內容,並相應地解決這些錯誤。
特定登錄的 SID 值用作在 SQL Server 中實現資料庫級別訪問的基礎。因此,如果同一登錄在該資料庫級別(在該伺服器上的兩個不同資料庫中)有兩個不同的 SID 值,則此登錄將僅能訪問其 SID 與該登錄的 syslogins 中的值相匹配的資料庫。如果所討論的兩個資料庫已從兩個不同的伺服器合並在一起,則可能出現這種情形。要解決此問題,必須使用 sp_dropuser 存儲過程從具有不匹配 SID 的資料庫中手動刪除所討論的登錄,然後再使用 sp_adser 存儲過程添加它。

『柒』 url如何傳入用戶密碼

用戶密碼一般不在url中傳遞,常用的是用post方法提交表單。
如果是要放到url中必須加密(aes常用的),比如:http://***?usr=admin&pwd=rafd8324fdfdsffsdf=

『捌』 web.py怎樣安全地傳遞密碼

保護密碼最好的的方式就是使用帶鹽的密碼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。