日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

转:Hash, MAC,HMAC说明

發(fā)布時(shí)間:2024/4/17 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:Hash, MAC,HMAC说明 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

from: http://www.cnblogs.com/songhan/archive/2012/07/29/2613898.html

?

Hash, MAC,HMAC

Hash-MD5, SHA-1, integrity

MAC- keyed hash, integrity & authenticity. HMAC 長(zhǎng)度和其所用的hash長(zhǎng)度一樣

?

Hash

是一種從任何一種數(shù)據(jù)中創(chuàng)建小的數(shù)字“指紋”的方法。散列函數(shù)把消息或數(shù)據(jù)壓縮成摘要,使得數(shù)據(jù)量變小,將數(shù)據(jù)的格式固定下來(lái)。

如果兩個(gè)散列值是不相同的(根據(jù)同一函數(shù)),那么這兩個(gè)散列值的原始輸入也是不相同的。

這個(gè)特性是散列函數(shù)具有確定性的結(jié)果,具有這種性質(zhì)的散列函數(shù)稱(chēng)為單向散列函數(shù)。

但另一方面,散列函數(shù)的輸入和輸出不是唯一對(duì)應(yīng)關(guān)係的,如果兩個(gè)散列值相同,兩個(gè)輸入值很可能是相同的。

但也可能不同,這種情況稱(chēng)為「碰撞」,這通常是兩個(gè)不同長(zhǎng)度的散列值,刻意計(jì)算出相同的輸出值。

Hash,一般翻譯做“散列”,也有直接音譯為"哈希"的,就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射, pre-image),通過(guò)散列算法,變換成固定長(zhǎng)度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會(huì)散列成相同的輸出,而不可能從散列值來(lái)唯一的確定輸入值。

簡(jiǎn)單的說(shuō)就是一種將任意長(zhǎng)度的消息壓縮到某一固定長(zhǎng)度的消息摘要的函數(shù)。

HASH主要用于信息安全領(lǐng)域中加密算法,他把一些不同長(zhǎng)度的信息轉(zhuǎn)化成雜亂的128位的編碼里,叫做HASH值. 也可以說(shuō),hash就是找到一種數(shù)據(jù)內(nèi)容和數(shù)據(jù)存放地址之間的映射關(guān)系

了解了hash基本定義,就不能不提到一些著名的hash算法,MD5 和 SHA1 可以說(shuō)是目前應(yīng)用最廣泛的Hash算法。

?

MD5(RFC1321) 是 Rivest 于 1991 年對(duì) MD4 的改進(jìn)版本,將任意長(zhǎng)的明文 hash 成?128 bit?的雜湊值。

MD5是一種不可逆的加密算法,目前是最牢靠的加密算法之一,尚沒(méi)有能夠逆運(yùn)算的程序被開(kāi)發(fā)出來(lái),它對(duì)應(yīng)任何字符串都可以加密成一段唯一的固定長(zhǎng)度的代碼。
那么它有什么用呢?很簡(jiǎn)單,通過(guò)它可以判斷原始值是否正確(是否被更改過(guò))。一般用于密碼的加密。而我們所提供的MD5校驗(yàn)碼就是針對(duì)安裝程序的唯一對(duì)應(yīng)的一段代碼。你可以使用任何MD5運(yùn)算器對(duì)下載的文件進(jìn)行運(yùn)算,運(yùn)算出來(lái)的結(jié)果如果完全符合我們提供的MD5校驗(yàn)碼,那么說(shuō)明你下載的這個(gè)程序沒(méi)有被中途修改過(guò)。
這個(gè)特征碼有如下特性,首先它不可逆,例如我有一段秘密的文字如:"My Secret Words",經(jīng)算法變換后得到MD5碼(b9944e9367d2e40dd1f0c4040d4daaf7),把這個(gè)碼告訴其他人,他們根據(jù)這個(gè)MD5碼是沒(méi)有系統(tǒng)的方法可以知道你原來(lái)的文字是什么的。?
其次,這個(gè)碼具有高度的離散性,也就是說(shuō),原信息的一點(diǎn)點(diǎn)變化就會(huì)導(dǎo)致MD5的巨大變化,例如"ABC" MD5(902fbdd2b1df0c4f70b4a5d23525e932)和"ABC "(多了一空格)MD5(12c774468f981a9487c30773d8093561)差別非常大,而且之間沒(méi)有任何關(guān)系,也就是說(shuō)產(chǎn)生的MD5碼是不可預(yù)測(cè)的。?
最后由于這個(gè)碼有128位那么長(zhǎng),所以任意信息之間具有相同MD5碼的可能性非常之低,通常被認(rèn)為是不可能的。?
所以一般認(rèn)為MD5碼可以唯一地代表原信息的特征,通常用于密碼的加密存儲(chǔ),數(shù)字簽名,文件完整性驗(yàn)證等。

?


SHA1 是由 NIST NSA 設(shè)計(jì)為同 DSA 一起使用的,sha 是 Secure Hash algorithm 的縮寫(xiě);它對(duì)長(zhǎng)度小于 2^64 的輸入,產(chǎn)生長(zhǎng)度為?160bit?的散列值;?SHA-1 設(shè)計(jì)時(shí)基于和 MD4 相同原理,并且模仿了該算法。

SHA1是由NIST NSA設(shè)計(jì)為同DSA一起使用的,它對(duì)長(zhǎng)度小于264的輸入,產(chǎn)生長(zhǎng)度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1 設(shè)計(jì)時(shí)基于和MD4相同原理,并且模仿了該算法。SHA-1是由美國(guó)標(biāo)準(zhǔn)技術(shù)局(NIST)頒布的國(guó)家標(biāo)準(zhǔn),是一種應(yīng)用最為廣泛的hash函數(shù)算法,也是目前最先進(jìn)的加密技術(shù),被政府部門(mén)和私營(yíng)業(yè)主用來(lái)處理敏感的信息。而SHA-1基于MD5,MD5又基于MD4。

?

?

?

?http://blog.csdn.net/showfray/article/details/2067362

http://blog.csdn.net/miaouu/article/details/6058126

?

?

MAC

消息認(rèn)證碼(帶密鑰的Hash函數(shù)):密碼學(xué)中,通信實(shí)體雙方使用的一種驗(yàn)證機(jī)制,保證消息數(shù)據(jù)完整性的一種工具。

安全性依賴于Hash函數(shù),故也稱(chēng)帶密鑰的Hash函數(shù)。消息認(rèn)證碼是基于密鑰和消息摘要【hash】所獲得的一個(gè)值,可用于數(shù)據(jù)源發(fā)認(rèn)證和完整性校驗(yàn)。

?

1. 發(fā)送者通過(guò)MAC算法計(jì)算出消息的MAC值,并和消息一起發(fā)給收信者

2. 收信者用同樣的MAC算法計(jì)算收到的消息的MAC值,并對(duì)比兩者。

?

HMAC

介紹:

Hash-based message authentication code,利用哈希算法,以一個(gè)密鑰和一個(gè)消息為輸入,生成一個(gè)消息摘要作為輸出。

a specific construction for calculating a?message authentication code?(MAC) involving a?cryptographic hash function?in combination with a secret?cryptographic key. As with any MAC, it may be used to simultaneously verify both the?data integrity?and theauthenticity?of a?message.【主要是為了能讓人對(duì)對(duì)方身份正確性和消息有效性進(jìn)行驗(yàn)證,與消息摘要的最大不同,就是有簽名密鑰!】

方法:

HMAC(K,m) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ m))

?

【opad重復(fù)0x36,ipad重復(fù)0x5C】

通過(guò)兩次hash兩個(gè)不同的key來(lái)生成。 還沒(méi)有發(fā)現(xiàn)有任何的方法來(lái)產(chǎn)生碰撞。

步驟:

First-Hash: H(Ko XOR Ipad || (data to auth))

Second-Hash: H(Ko XOR Opad || First-Hash)

1. 字符含義

  H 代表所采用的HASH算法(如SHA-256)?

  K 代表認(rèn)證密碼

  B 代表H中所處理的塊大小,這個(gè)大小是處理塊大小,而不是輸出hash的大小 【SHA-1和SHA-256 B = 64,SHA-384和SHA-512 B = 128 】

  Ko 代表HASH算法的密文 【在密鑰K后面添加0來(lái)創(chuàng)建一個(gè)字長(zhǎng)為B的字符串。(例如,如果K的字長(zhǎng)是20字節(jié),B=64字節(jié),則K后會(huì)加入44個(gè)零字節(jié)0x00)?

  Opad 用0x5a重復(fù)B次?
  Ipad 用0x36重復(fù)B次

2. Ko與ipad做異或運(yùn)算。

3.?將數(shù)據(jù)流text填充至第2步的結(jié)果字符串中

4.?用H作用于第3步生成的數(shù)據(jù)流。?

5. Ko與opad做異或運(yùn)算。

6.?再將第4步的結(jié)果填充進(jìn)第5步的結(jié)果中。?

7.?用H作用于第6步生成的數(shù)據(jù)流,輸出最終結(jié)果?

?

應(yīng)用:

HMAC的一個(gè)典型應(yīng)用是用在“挑戰(zhàn)/響應(yīng)”(Challenge/Response)身份認(rèn)證中

?

?

1.?客戶端向服務(wù)器發(fā)出一個(gè)驗(yàn)證請(qǐng)求

2.?服務(wù)器接到此請(qǐng)求后生成一個(gè)隨機(jī)數(shù)并通過(guò)網(wǎng)絡(luò)傳輸給客戶端(此為挑戰(zhàn))

3.?客戶端將收到的隨機(jī)數(shù)提供給ePass,由ePass使用該隨機(jī)數(shù)存儲(chǔ)在ePass中的密鑰進(jìn)行HMAC-MD5運(yùn)算并得到一個(gè)結(jié)果作為認(rèn)證證據(jù)傳給服務(wù)器(此為響應(yīng))。

4.?與此同時(shí),服務(wù)器也使用該隨機(jī)數(shù)存儲(chǔ)在服務(wù)器數(shù)據(jù)庫(kù)中的該客戶密鑰進(jìn)行HMAC-MD5運(yùn)算,如果服務(wù)器的運(yùn)算結(jié)果與客戶端傳回的響應(yīng)結(jié)果相同,則認(rèn)為客戶端是一個(gè)合法用戶?

?

安全性:

HMAC算法更象是一種加密算法,它引入了密鑰,其安全性已經(jīng)不完全依賴于所使用的HASH算法

?

1.?使用的密鑰是雙方事先約定的,第三方不可能知道。能夠得到的信息只有作為“挑戰(zhàn)”的隨機(jī)數(shù)和作為“響應(yīng)”的HMAC結(jié)果,無(wú)法根據(jù)這兩個(gè)數(shù)據(jù)推算出密鑰。由于不知道密鑰,所以無(wú)法仿造出一致的響應(yīng)。

2.?HMAC與一般的加密重要的區(qū)別在于它具有“瞬時(shí)”性,即認(rèn)證只在當(dāng)時(shí)有效

?

http://stamen.iteye.com/blog/1558255

http://baike.baidu.com/view/1136366.htm

?

轉(zhuǎn)載于:https://www.cnblogs.com/jhj117/p/5945866.html

與50位技術(shù)專(zhuān)家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的转:Hash, MAC,HMAC说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。