哈西加密
⑴ 誰能告訴我哈希是什麼
什麼是哈希?
⑵ 什麼是SHA1加密技術
Algorithm)又叫安全哈希加密技術,是當今世界最先近的加密演算法。主要用於文件身份識別、數字簽名和口令加密等。
對於明文信息A,通過SHA1演算法,生成一條160位長的識別碼B。且明文信息A和識別碼B之間同時滿足以下條件:
1、對於任意兩條不同的明文信息A1、A2,其識別碼B1、B2都不相同。
2、無法通過逆向演算法由識別碼B倒推出明文信息A。
MOONCRM的用戶密碼採用SHA1加密存儲,即伺服器上存儲的只是
由用戶密碼生成的識別碼,而用戶密碼本身並沒有存儲在伺服器上。用戶輸入登陸口令時,系統會根據輸入口令生成相應識別碼並與系統中所存儲的識別碼進行比較,如二者一致,則認為口令正確。系統中沒有存儲用戶原始的口令值,即使有人獲得口令文件,也無法破解用戶登陸密碼,確保用戶密碼絕對安全。
在ASP.NET中,可以通過以下命令來加密密碼字元串:
//passwordString是密碼字元串
System.Web.Security.FormsAuthentication.
(passwordString,
"SHA1");
這樣就可以和系統中所存儲的識別碼進行比較了!
--------北大青鳥西安華美---------
⑶ 哈希是什麼,誰能解釋一下
哈希音譯自「Hash」,又名為「散列」。本質上是一種計算機程序,可接收任意長度的信心輸入,然後通過哈希演算法,創建小的數字「指紋」的方式。
例如數字與字母的結合,輸出的就為「哈希值」。從數學術語上說,就是這個哈希函數,是將任意長度的數據,映射在有限長度的域上。總體而言,哈希函數用於,將消息或數據壓縮,生成數據摘要,最終使數據量變小,並擁有固定格式。
那麼哈希演算法的作用又是什麼呢?
(1) 在龐大的資料庫中,由於哈希值更為短小,被找到更為容易,因此,哈希使數據的存儲與查詢速度更快。
(2) 哈希能對信息進行加密處理,使得數據傳播更為安全。
哈希演算法解決了什麼生活問題?
看似深奧的數學函數,又或是計算機程序的哈希演算法,其實跟我們的生活息息相關。就拿每年雙十一的快遞來說,實際上,哈希演算法原理提高了快遞入庫出庫的速度。
⑷ C++語言如何哈希加密
Hash是一類演算法,最常見的是MD5。
如果是windows平台,可以用動態鏈接庫advapi32.dll,此動態鏈接庫提供以下md5函數:
MD5Init(&ctx);
MD5Update(&ctx, buf, len);
MD5Final(&ctx);
MD5 和 SHA1 是目前應用最廣泛的Hash演算法,而它們都是以 MD4 為基礎設計的。
參考一下:http://blog.163.com/star_verygood@yeah/blog/static/16792052720109119031452/
⑸ 哈希加密為什麼是不可逆的知道的請告訴我
哈希密碼,指的是對口令進行一次性的加密處理而形成的雜亂字元串。這個加密的過程被認為是不可逆的,也就是說,從哈希串中是不可能還原出原口令的。雖然它不是唯一一個能夠保證你的聯網應用程序安全性的方法,但是它是眾多安全保護措施中的一個
⑹ 哈希加密為什麼是不可逆的
不可逆加密演算法的特徵是加密過程中不需要使用密鑰,輸入明文後由系統直接經過加密演算法處理成密文,這種加密後的數據是無法被解密的,只有重新輸入明文,並再次經過同樣不可逆的加密演算法處理,得到相同的加密密文並被系統重新識別後,才能真正解密。顯然,在這類加密過程中,加密是自己,解密還得是自己,而所謂解密,實際上就是重新加一次密,所應用的「密碼」也就是輸入的明文。不可逆加密演算法不存在密鑰保管和分發問題,非常適合在分布式網路系統上使用,但因加密計算復雜,工作量相當繁重,通常只在數據量有限的情形下使用,如廣泛應用在計算機系統中的口令加密,利用的就是不可逆加密演算法。近年來,隨著計算機系統性能的不斷提高,不可逆加密的應用領域正在逐漸增大。在計算機網路中應用較多不可逆加密演算法的有RSA公司發明的MD5演算法和由美國國家標准局建議的不可逆加密標准SHS(Secure Hash Standard:安全雜亂信息標准)等。
不可逆就是假如有兩個密碼3和4,我的加密演算法很簡單就是3+4,結果是7,但是通過7我不可能確定那兩個密碼是3和4,有很多種組合,這就是最簡單的不可逆,所以只能通過暴力破解一個一個的試
⑺ 哈希是什麼,玩法是怎樣的
哈希又稱作「散列」,是一種數學計算機程序,它接收任何一組任意長度的輸入信息,通過哈希演算法變換成固定長度的數據指紋輸出形式,如字母和數字的組合,該輸出就是「哈希值」。
總體而言,哈希演算法可理解為一種消息摘要演算法,將消息或數據壓縮變小並擁有固定格式。由於其單向運算具有一定的不可逆性,哈希演算法已成為加密演算法中一個構成部分,但完整的加密機制不能僅依賴哈希演算法。
關於不可逆,簡單理解就像1+4=5和2+3=5一樣,即便你知道結果是5,仍得不出輸入的是什麼數字。
常見哈希演算法
目前常見的 Hash 演算法包括國際上的 Message Digest( MD) 系列和 Secure Hash Algorithm( SHA) 系列演算法,以及國內的 SM3 演算法。
其中,SHA 256 是 SHA 系列演算法之一,由美國國安局設計、美國國家標准與技術研究院發布的一套哈希演算法,由於其摘要長度為 256bits,故稱 SHA 256。SHA 256也是保護數字信息的最安全的方法之一。
例如計算
「hello blockchain world, this is yeasy@github」的SHA-256 Hash值,
得到的結果將是
「」。
對於某個文件,無需查看原始內容,只要其 SHA-256 Hash 計算後結果相同,則說明該文件內容極大概率就是一樣的。
⑻ 哈希的演算法是什麼
哈希演算法是一個廣義的演算法,也可以認為是一種思想,使用Hash演算法可以提高存儲空間的利用率,可以提高數據的查詢效率,也可以做數字簽名來保障數據傳遞的安全性。所以Hash演算法被廣泛地應用在互聯網應用中。
哈希演算法也被稱為散列演算法,Hash演算法雖然被稱為演算法,但實際上它更像是一種思想。Hash演算法沒有一個固定的公式,只要符合散列思想的演算法都可以被稱為是Hash演算法。
特點:
加密哈希跟普通哈希的區別就是安全性,一般原則是只要一種哈希演算法出現過碰撞,就會不被推薦成為加密哈希了,只有安全度高的哈希演算法才能用作加密哈希。
同時加密哈希其實也能當普通哈希來用,Git 版本控制工具就是用 SHA-1 這個加密哈希演算法來做完整性校驗的。一般來講越安全的哈希演算法,處理速度也就越慢,所以並不是所有的場合都適合用加密哈希來替代普通哈希。
⑼ 哈希加密演算法
MD5即Message-Digest Algorithm 5(信息摘要演算法5),是計算機廣泛使用的散列演算法之一。經MD2、MD3和MD4發展而來,誕生於20世紀90年代初。用於確保信息傳輸完整一致。雖然已被破解,但仍然具有較好的安全性,加之可以免費使用,所以仍廣泛運用於數字簽名、文件完整性驗證以及口令加密等領域。
演算法原理:
散列演算法得到的結果位數是有限的,比如MD5演算法計算出的結果字長為128位,意味著只要我們窮舉2^128次,就肯定能得到一組碰撞,下面讓我們來看看一個真實的碰撞案例。我們之所以說MD5過時,是因為它在某些時候已經很難表現出散列演算法的某些優勢——比如在應對文件的微小修改時,散列演算法得到的指紋結果應當有顯著的不同,而下面的程序說明了MD5並不能實現這一點。
而諸如此類的碰撞案例還有很多,上面只是原始文件相對較小的一個例子。事實上現在我們用智能手機只要數秒就能找到MD5的一個碰撞案例,因此,MD5在數年前就已經不被推薦作為應用中的散列演算法方案,取代它的是SHA家族演算法,也就是安全散列演算法(Secure Hash Algorithm,縮寫為SHA)。
SHA實際包括有一系列演算法,分別是SHA-1、SHA-224、SHA-256、SHA-384以及SHA-512。而我們所說的SHA2實際是對後面4中的統稱。各種SHA演算法的數據比較如下表,其中的長度單位均為位:
MD5和SHA1,它們都有4個邏輯函數,而在SHA2的一系列演算法中都採用了6個邏輯函數。
以SHA-1為例,演算法包括有如下的處理過程:
和MD5處理輸入方式相同
經過添加位數處理的明文,其長度正好為512位的整數倍,然後按512位的長度進行分組,可以得到一定數量的明文分組,我們用Y 0 ,Y 1 ,……Y N-1 表示這些明文分組。對於每一個明文分組,都要重復反復的處理,這些與MD5都是相同的。
而對於每個512位的明文分組,SHA1將其再分成16份更小的明文分組,稱為子明文分組,每個子明文分組為32位,我們且使用M[t](t= 0, 1,……15)來表示這16個子明文分組。然後需要將這16個子明文分組擴充到80個子明文分組,我們將其記為W[t](t= 0, 1,……79),擴充的具體方法是:當0≤t≤15時,Wt = Mt;當16≤t≤79時,Wt = ( W t-3 ⊕ W t-8 ⊕ W t-14 ⊕ W t-16 ) <<< 1,從而得到80個子明文分組。
所謂初始化緩存就是為鏈接變數賦初值。前面我們實現MD5演算法時,說過由於摘要是128位,以32位為計算單位,所以需要4個鏈接變數。同樣SHA-1採用160位的信息摘要,也以32位為計算長度,就需要5個鏈接變數。我們記為A、B、C、D、E。其初始賦值分別為:A = 0x67452301、B = 0xEFCDAB89、C = 0x98BADCFE、D = 0x10325476、E = 0xC3D2E1F0。
如果我們對比前面說過的MD5演算法就會發現,前4個鏈接變數的初始值是一樣的,因為它們本來就是同源的。
經過前面的准備,接下來就是計算信息摘要了。SHA1有4輪運算,每一輪包括20個步驟,一共80步,最終產生160位的信息摘要,這160位的摘要存放在5個32位的鏈接變數中。
在SHA1的4論運算中,雖然進行的就具體操作函數不同,但邏輯過程卻是一致的。首先,定義5個變數,假設為H0、H1、H2、H3、H4,對其分別進行如下操作:
(A)、將A左移5為與 函數的結果求和,再與對應的子明文分組、E以及計算常數求和後的結果賦予H0。
(B)、將A的值賦予H1。
(C)、將B左移30位,並賦予H2。
(D)、將C的值賦予H3。
(E)、將D的值賦予H4。
(F)、最後將H0、H1、H2、H3、H4的值分別賦予A、B、C、D
這一過程表示如下:
而在4輪80步的計算中使用到的函數和固定常數如下表所示:
經過4輪80步計算後得到的結果,再與各鏈接變數的初始值求和,就得到了我們最終的信息摘要。而對於有多個明文分組的,則將前面所得到的結果作為初始值進行下一明文分組的計算,最終計算全部的明文分組就得到了最終的結果。
⑽ 通信安全:哈希、加密、證書、簽名、密鑰協商、ECDH、TLS、DTLS
哈希也叫散列,是把任意長度的輸入通過散列演算法變換成固定長度的輸出,該輸出就是散列值,也叫摘要(Digest)。
這種轉換是一種 壓縮映射。 也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值,但如果輸出的位數足夠,不同輸入散列成相同輸出的概率非常非常小。
簡單的說, 散列就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的過程 。
散列是不可逆的 ,也就是無法通過輸出還原輸入,此特性常被用於密碼保存。
SHA-512、MD5等都是著名的散列函數,MD5生成的散列碼是128位,甚至MD5就是哈希的同名詞,你可以通過網站:https://passwordsgenerator.net/sha512-hash-generator/ 在線計算哈希。
散列有什麼用?
加密就是把 明文變成密文的過程,解密就是反方向把密文變成明文 。
比如著名的 凱撒密碼 ,就是把每個字對應到另一個,這樣的話,只要有密碼本,就能對照完成加解密。比如最簡單的,對於英文26個字母,每個字母右移3個,abc變成def,這也是一種加密,當然這種加密很簡單,很容易被破譯。
而諸如AES(高級加密標准)、3DES(三重數據加密演算法)則被公認為很難破解,不過山東大學女教授王小雲很厲害,破解了MD5和SHA-1,迫使加密標准升級,最終當上了院士。
對稱加密
對稱加密就是加解密的密鑰是一樣的,優點是快,這也是傳統的加密方式,像AES、3DES都是對稱加密。
非對稱加密
非對稱加密用於加解密的密鑰不一樣,有2個密鑰,公鑰和私鑰,公鑰可以公開,私鑰妥善保管。RSA、ECC(橢圓曲線加密演算法)、DH(密鑰交換演算法)這些都是非對稱加密。
非對稱加密很慢,有多慢?相比對稱加密慢1000倍,因為慢,所以它常用於密鑰協商(Handshake),協商出會話密鑰後,再用對稱密鑰加密通信數據。
1976年,Whitfield Diffie和Martin Hellman首次提出了非對稱加密的概念,該演算法被稱為Diffie-Hellman密鑰交換。然後在1978年,麻省理工學院的Ron Rivest,Adi Shamir和Leonard Adleman發表了RSA 演算法。這些都可以被視為非對稱加密的基礎。
非對稱加密也稱為公鑰基礎結構,又稱PKI。 非對稱加密的提出是密碼學上的一次革命,影響深遠。
非對稱加密演算法用私鑰加密,用公鑰解密,或者用公鑰加密,用私鑰解密。
證書就是為了證明我是我,比如你要訪問中國銀行網站,但中行官網如何證明它是中行官網呢?答案就是數字證書。
CA是數字證書中心,伺服器需要找CA做認證,讓CA給自己頒布數字證書,數字證書內一般包含服務的一些信息、以及伺服器的公鑰,通過CA的私鑰加密後,產生的數字證書,因為CA的權威性,且它的公鑰天下皆知,所以,如果你能用CA的公鑰解開證書,那便可證明該證書一定是CA頒發的,要不然它不會有CA的私鑰,也便沒法產生可用CA公鑰解密的證書。
所以,由此可見,數字證書用到了非對稱加密。
日常生活中也有簽名,每個人的筆跡是不一樣的,你刷卡消費後在賬單簽上大名,服務員校驗過之後保存下來,你哪天賴賬,便可以有簽名為證,因為別人寫的字跟你的筆跡終有差別。
那數字簽名是什麼呢?比如a發一封email,接收方怎麼證明這封信是a寫的?
本質上,數字簽名也是利用了非對稱加密。
前面講了,非對稱加密有公鑰和私鑰,如果發生方用私鑰加密,然後接收方用發送方的公鑰可以解密,那便可以證明是從某發送方發送的,因為別人拿不到你的私鑰,也便無法用你的私鑰加密,你不能抵賴。
數字簽名通常先對內容算哈希,產生內容摘要,再用私鑰加密,得到簽名。
下面舉一個例子來說明這幾個問題:
張三有2把鑰匙,一把公鑰,公告天下,一把私鑰,妥善保管,只有自己知道,很明顯,非對稱加密。
李四給張三寫信,寫完之後,用張三的公鑰加密,通過郵局寄給張三,即使郵遞員拆開信封看,他也看不懂,因為內容是密文,只有張三的密鑰才能解密。
張三收到信後,用私鑰解密,可以正常閱讀。
現在張三要給李四回信,寫完後,用hash函數生成摘要digest。
然後張三,再用私鑰對摘要加密,生成數字簽名signature。
然後把簽名附在信的下面,一起發給李四。
過程是:信明文 -> hash -> digist -> 私鑰加密 -> signature。
李四收到回信後,用張三的公鑰對數字簽名解密,得到摘要,由此證明,信確實是張三發出的,為什麼?因為如果不是張三發的,那寫信的人就沒有張三私鑰,用別的私鑰加密得到的簽名,是無法用張三的公鑰解開的。
李四,再對信的內容做hash,得到摘要,與上一步得到的摘要對比,如果一致,則證明信的內容沒有被修改過,信的內容是完整的。
復雜的情況出現了。
王五,用自己的公鑰替換李四保存的張三的公鑰,也就是王五欺騙了李四,李四誤把王五的公鑰當張三的公鑰,這樣一來,王五就能冒充張三給李四寫信(王五用自己的私鑰加密)。
問題是什麼?問題是李四不能確信自己保存的公鑰真的是張三的公鑰。如果客戶端電腦上存的工商銀行官網的公鑰,實際上是騙子公司的公鑰,那就麻煩大了。
怎麼破?讓張三去認證中心CA(Certificate Authority),為公鑰做認證,怎麼做呢?CA中心用自己的私鑰,對張三的公鑰和其他相關信息一起加密,生成數字證書(Digital Certificate)。
張三拿到數字證書後,以後給李四回信,在簽名的同時,附帶上數字證書。
李四收到信之後,從CA的公鑰解開數字證書,取出張三的公鑰(一定是真的),然後就能放心的愉快的按之前的流程解開簽名了。
數字證書加入後,核心區別就是張三的公鑰不再保存在李四處,而是通過數字證書下發。
為什麼數字證書里的張三的公鑰一定是真的呢?因為CA是權威機構,假設全世界就一家(其實不止,但也不多),它的公鑰天下盡知,就是固定的串,所以能用CA公鑰解開的證書,一定是CA頒布的,因為CA用它的私鑰加密產生的證書。很明顯,非對稱加密能用於證明我是我。
密鑰交換演算法
著名的DH密鑰交換演算法,這個演算法很有意思,也很巧妙,簡而言之,就是通信雙方交換一點信息(不怕被偷看到),然後就在兩端,分布產生出一個相同的密鑰,神奇啊。
有一個很有意思的例子。
Alice和Bob要協商出一個公共的顏色,他們可以交換信息,但交換的信息,可以被偷看到,怎麼辦?既能協商出公共顏色,又不能讓別人知道呢。
密鑰交換演算法的原理跟這個差不多,網上有大量的資料講述這個問題,我覺得理解了上面的例子,再看ECDH便也不難了。
眾所周知http是互聯網協議,但是它不夠安全,所以後面有改進版的https,其實就是多了一個TLS,這個是傳輸層加密,本質上,就是通過handshake,協商出一個會話密鑰,後面的數據傳遞,都用這個密鑰做對稱加解密。
我們經常講安全通道,其實也就是協商出一個會話密鑰,他並不神秘。胡亂放幾張圖片吧。
為了減少這幾個RTT,又想了各種辦法,然後復用連接的話,就可以做到0RTT,1RTT了。
就說這些吧,最後拋幾個名詞,有興趣自行網路學習:DTLS,HMAC,AEAD,重放攻擊,放大攻擊,是不是很高端?