MD5與SHA1

一、MD5

  MD5消息摘要算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼散列函數,可以產生出一個128位(16字節)的散列值(hash value),用于確保信息傳輸完整一致。MD5由美國密碼學家羅納德·李維斯特(Ronald Linn Rivest)設計,于1992年公開,用以取代MD4算法。

  MD5算法是不可逆的,不能通過摘要信息得到原始數據。

MD5應用

編輯

一致性驗證

MD5的典型應用是對一段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在Unix下有很多軟件在下載的時候都有一個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有一行文本,大致結構如:?[1]?
MD5 (tanajiya.tar.gz) = 38b8c2c1093dd0fec383a9d9ac940515
這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作一個大文本信息,通過其不可逆的字符串變換算法,產生了這個唯一的MD5信息摘要。為了讓讀者朋友對MD5的應用有個直觀的認識,筆者以一個比方和一個實例來簡要描述一下其工作過程:
大家都知道,地球上任何人都有自己獨一無二的指紋,這常常成為司法機關鑒別罪犯身份最值得信賴的方法;與之類似,MD5就可以為任何文件(不管其大小、格式、數量)產生一個同樣獨一無二的“數字指紋”,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”都會發生變化。
我們常常在某些軟件下載站點的某軟件信息中看到其MD5值,它的作用就在于我們可以在下載該軟件后,對下載回來的文件用專門的軟件(如Windows MD5 Check等)做一次MD5校驗,以確保我們獲得的文件與該站點提供的文件為同一文件。
具體來說文件的MD5值就像是這個文件的“數字指紋”。每個文件的MD5值是不同的,如果任何人對文件做了任何改動,其MD5值也就是對應的“數字指紋”就會發生變化。比如下載服務器針對一個文件預先提供一個MD5值,用戶下載完該文件后,用我這個算法重新計算下載文件的MD5值,通過比較這兩個值是否相同,就能判斷下載的文件是否出錯,或者說下載的文件是否被篡改了。MD5實際上一種有損壓縮技術,壓縮前文件一樣MD5值一定一樣,反之MD5值一樣并不能保證壓縮前的數據是一樣的。在密碼學上發生這樣的概率是很小的,所以MD5在密碼加密領域有一席之地。但是專業的黑客甚至普通黑客也可以利用MD5值實際是有損壓縮技術這一原理,將MD5的逆運算的值作為一張表俗稱彩虹表的散列表來破解密碼。
利用MD5算法來進行文件校驗的方案被大量應用到軟件下載站、論壇數據庫、系統文件安全等方面。

數字簽名

MD5的典型應用是對一段Message(字節串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫 readme.txt文件中,并對這個readme.txt產生一個MD5的值并記錄在案,然后你可以傳播這個文件給別人,別人如果修改了文件中的任何內容,你對這個文件重新計算MD5時就會發現(兩個MD5值不相同)。如果再有一個第三方的認證機構,用MD5還可以防止文件作者的“抵賴”,這就是所謂的數字簽名應用。

安全訪問認證

MD5還廣泛用于操作系統的登陸認證上,如Unix、各類BSD系統登錄密碼、數字簽名等諸多方面。如在Unix系統中用戶的密碼是以MD5(或其它類似的算法)經Hash運算后存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼進行MD5 Hash運算,然后再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這可以避免用戶的密碼被具有系統管理員權限的用戶知道。MD5將任意長度的“字節串”映射為一個128bit的大整數,并且是通過該128bit反推原始字符串是困難的,換句話說就是,即使你看到源程序和算法描述,也無法將一個MD5的值變換回原始的字符串,從數學原理上說,是因為原始的字符串有無窮多個,這有點象不存在反函數的數學函數。所以,要遇到了md5密碼的問題,比較好的辦法是:你可以用這個系統中的md5()函數重新設一個密碼,如admin,把生成的一串密碼的Hash值覆蓋原來的Hash值就行了。
正是因為這個原因,現在被黑客使用最多的一種破譯密碼的方法就是一種被稱為"跑字典"的方法。有兩種方法得到字典,一種是日常搜集的用做密碼的字符串表,另一種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然后再用目標的MD5值在這個字典中檢索。我們假設密碼的最大長度為8位字節(8 Bytes),同時密碼只能是字母和數字,共26+26+10=62個字節,排列組合出的字典的項數則是P(62,1)+P(62,2)….+P(62,8),那也已經是一個很天文的數字了,存儲這個字典就需要TB級的磁盤陣列,而且這種方法還有一個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。這種加密技術被廣泛的應用于Unix系統中,這也是為什么Unix系統比一般操作系統更為堅固一個重要原因。
二、SHA

概述

安全散列算法(SHA,Secure Hash)是一種常用的數據加密算法。它由美國國家標準與技術局(NIST)于1993年作為聯邦信息處理標準公布(即第一代SHA算法SHA-0)。在1995年,其改進版本SHA一1也正式公布(SHA一1具有比SHA—0更高的安全性)。SHA-1算法是目前最常用的安全散列算法和最先進的加密技術。SHA-1算法的思想是接收一段明文,然后以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單地理解為取一串輸入碼,把它們轉化為長度較短、位數固定的輸出序列即散列值(稱為信息摘要)的過程。該算法對長度不超過2的64次方的消息產生160位的消息摘要輸出,輸入按512位的分組進行處理。  
SHA-1算法在加密學中扮演著極其重要的角色,可以用于實現數據保密、防止數據更改和身份驗證等功能。一個典型的應用是從數字消息、IP信息包、磁盤文件等數據抽取散列值(稱為消息摘要),井與對稱或非對稱加密技術一起來完成對原始數據的認證和完整性檢查。另外,SHA-1算法是當今眾多流行加密思想核心,幾乎無處不在。它在許多安全協議中廣為使用,如:數字簽名標準(DSS)、傳輸層安全(TLS)、安全電子交易(SET),互聯網協議安全(IPSec)、無線局域網(WLANs)安全、隨機數生成算法和密碼存儲機制等。?[2]?

特性

SHA-1算法具有兩個重要特性:單向性和抗碰撞性。
單向性即由原始消息計算出信息摘要很容易,而由消息摘要計算出原始消息在計算上則幾乎是不可行的。
而所謂的抗碰撞性是指,要找到兩個不同的原始消息生成同一個信息摘要在計算上也是不可行的。?[2]?

算法安全性

SHA-1算法是由MDS算法演變而來的,它們之間最大的區別在于前者產生的摘要長度比后者長32bit。SHA-1對于強行攻擊,產生任何一個報文使之摘要等于給定報文摘要的難度為2160數量級的操作,較MDS的2128數量級操作要難。因此,SHA-1算法對抵抗強行攻擊的強度很高。同時,因為SHA-1算法的循環步驟有80次,比MDS算法的64次要多,所以其運行速度也較慢。
從目前密碼學研究的最新進展來看,SHA-1雖然被發現存在缺陷(碰撞),但在近幾年內,仍然可以大量使用SHA-1算法。同時,專家們認為王小云等人發現當前所用的散列算法存在的問題,必將幫助新的散列算法設計者考慮到這方面的問題,使得新的散列算法具有更好的安全性。美國政府的大多數應用被要求在今年年底以前改用SHA-2散列函數系列,早期的應用也要盡可能地進行升級。SHA-2算法跟 SHA一1基本上相似,至今尚末出現對SHA-2算法的攻擊。
三、MD5和SHA1對比

  由于MD5 與SHA-1均是從MD4 發展而來,它們的結構和強度等特性有很多相似之處,表(1)是對MD5 與SHA-1的結構比較。SHA-1與MD5 的最大區別在于其摘要比MD5 摘要長 32bit。對于強行攻擊,產生任何一個報文使之摘要等于給定報文摘要的難度:MD5 是2128 數量級的操作,SHA-1 是2160數量級的操作。產生具有相同摘要的兩個報文的難度:MD5是 264 是數量級的操作,SHA-1 是280 數量級的操作。因而,SHA-1對強行攻擊的強度更大。但由于SHA-1 的循環步驟比MD5 多(80:64)且要處理的緩存大(160 比特:128 比特),SHA-1的運行速度比MD5 慢

  MD5 和SHA-1 是單項散列函數的典型代表,它們廣泛地應用在信息安全和數字簽名等各個領域。從而有效地抗擊了信息的主動式攻擊,本文基于AVR單片機實現了這兩種算法,并結合匯編語言盡心了優化,取得了較好的效果。根據信息安全的要求的不同層次可以靈活選擇這兩種算法從而達到實際目的。



轉載于:https://www.cnblogs.com/ostin/p/10382056.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/395170.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/395170.shtml
英文地址,請注明出處:http://en.pswp.cn/news/395170.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java基本類型的默認值及其取值范圍

轉載于:https://www.cnblogs.com/billyu/p/5843845.html

tair client java_TFS(Taobao File System)Java Client 使用經驗

TFS Java客戶端的說明tfs-client-java版本選擇:---------------------------------------tfs-client-java的版本有:release-2.0.0/tfs-with-large-2.1.1/tfs-client-java-2.1.3/release-2.2.2/release-2.2.3/release-2.2.4/release-2.2.6/最終我選用了tf…

Nutanix公布財報數據 準備IPO前表現搶眼

Nutanix已經向美國證券交易委員會提交了修訂的S-1 IPO文件,其中的數據顯示,Nutanix憑借著強力增長的業務為IPO做好了準備。 Nutanix公布財報數據 準備IPO前表現搶眼 Nutanix CEO Dheeraj Pandey Nutanix最新的財報數據無論從環比和同比收入增長方面看起來…

DevExpress WinForms使用教程:圖表控件 - 內置深入查詢

【DevExpress WinForms v18.2下載】在最新發布的DevExpress WinForms v18.2中,DevExpress WinForms和ASP.NET圖表控件引入嵌套系列模板的概念,是您能在不編寫自定義代碼的情況下深入查詢圖表。 Chart控件的嵌入式痕跡導航元素顯示導航層次結構中各個數據…

serverless 構建_使用Serverless,StepFunctions和StackStorm Exchange構建社區注冊應用程序-Episode…...

serverless 構建by Dmitri Zimine由Dmitri Zimine 使用Serverless,StepFunctions和StackStorm Exchange構建社區注冊應用程序-第3集 (Building a community sign-up app with Serverless, StepFunctions, and StackStorm Exchange — Episode 3) Build a real-worl…

AlfaLaval公司采用低速通風技術冷卻數據中心

日前,瑞典熱交換專家AlfaLaval公司推出了遵循低速通風原則的一系列數據中心冷卻解決方案,其方案需要大量的風扇,而使空氣以相當慢的速度流動,取得了與計算機機房空調(CRAC)一樣有效的制冷效果。 該公司表示…

java pdf 首頁 縮略圖_Java中將上傳的文件首頁生成縮略圖(先將上傳的文件轉成pdf,然后將pdf轉成jpg)...

1、首先將上傳的非jpg,pdf格式的文件轉成pdf,這個是采用OpenOffice進行轉的,具體代碼如下:private void officeToPdf(){OpenOfficeConnection connection new SocketOpenOfficeConnection(8100);try {connection.connect();} cat…

1.2 如何在visual studio 中建立C#程序

這一節簡單介紹一下怎么在visual studio 2015中建立第一個C#程序,我使用的是2015版的visual studio,不同版本可能有一些差異,不過大體上是相同的,這些信息僅供新手參考,大牛請自動跳過。 首先雙擊visual studio 2015的…

javascript在html中的延遲與異步

1.相同點:延遲與異步都會同時加載script 2.不同點:延遲是script加載完成后,待HTML執行完畢后,才會接著執行script; 異步是script加載完成后,接著就執行該程序,HTML等到script完全執行完畢后&…

三星全速進軍物聯網 所有產品都將內置互聯功能

韓媒報道,近日消息傳出,三星電子的家電部門,當前生產的產品都將內建Wi-Fi。相關高層表示,此種做法可替更先進的功能預作準備,因為家電壽命較長,至少可用五年。目前為止,三星家電只有部分具備Wi-…

2d手機游戲開發_我的手機游戲如何在2周內獲得365K應用商店下載(以及為什么我退出獨立游戲開發公司…...

2d手機游戲開發by William Kwan關冠偉 我的手機游戲如何在2周內獲得365K應用商店下載(以及為什么以后我退出獨立游戲開發者) (How My Mobile Game Got 365K App Store Downloads in 2 Weeks (And Why I Quit Indie Game Dev Afterwards)) I’m not a successful game develope…

Python ValueError: IO operation on closed file

ValueError IO operation on closed file表示處理了已經被關閉的數據,在python 中 with語句的上下文會幫助處理,也就是說,當python的處理代碼不對齊的時候會出現這種情況。例子如下: header那一行,突出,也就…

java面向字符的輸入流_詳細解讀Java編程中面向字符的輸入流

字符流是針對字符數據的特點進行過優化的,因而提供一些面向字符的有用特性,字符流的源或目標通常是文本文件。 Reader和Writer是java.io包中所有字符流的父類。由于它們都是抽象類,所以應使用它們的子類來創建實體對象,利用對象來…

任務信號量

在實際任務間的通信中,一個或多個任務發送一個信號量或者消息給另一個任務是比常見的,而一個任務給多個任務發送信號量和消息相對比較少。前面所講的信號量和消息隊列均是單獨的內核對象,是獨立于任務存在的。這兩章要講述的任務信號量和任務…

域名服務商GoDaddy第四季度扭虧為盈

2月18日消息,據財經網站MarketWatch報道,域名服務提供商GoDaddy周三公布了第四季度財報。公司期內利潤與營收均好于預期,給出的營收指導亦符合預測水平。 財報顯示,第四季度中GoDaddy營收同比增長14%,為4.254億美元&am…

易于使用的人工智能_需求分析:如何使用這種易于啟動的方法+一個案例研究...

易于使用的人工智能by Turgay elik由Turgayelik 需求分析:如何使用這種易于啟動的方法一個案例研究 (Requirement Analysis: how to use this startup-friendly approach a case study) In our previous blog posts, we explained why we decided to develop the …

java writeboolean_Java DataOutputStream writeBoolean()方法(帶示例)

DataOutputStream類writeBoolean()方法writeBoolean()方法在java.io包中可用。writeBoolean()方法用于將給定的布爾字節寫入基本輸出流,因此成功執行后寫入的變量計數器為1。writeBoolean()方法是一種非靜態方法,只能通過類對象訪問,如果嘗試…

【BZOJ4300】—絕世好題(二進制dp)

傳送門 考慮到只需要bi&bi?1?0b_i\&b_{i-1} \not0bi?&bi?1???0 由于&\&&,我們考慮二進制下只需要一位不為0就可以了f[i]f[i]f[i]表示當前數下,第iii位不為0的最優長度 那就是需要枚舉當前這個數所有位就…

愛立信與中國聯通成功完成國內首個LTE三載波聚合大規模部署測試

近日,愛立信與中國聯通網絡技術研究院、聯通四川省公司、聯通成都市分公司、Qualcomm Incorporated子公司Qualcomm Technologies, Inc.合作成功實現了國內首個三載波聚合大規模部署和運行測試,下行單用戶峰值速率達到375Mbps。該項目充分驗證了載波聚合大…

七牛服務器入門教程_教程:使用無服務器,StepFunction和StackStorm構建社區的入門應用程序…...

七牛服務器入門教程by Dmitri Zimine由Dmitri Zimine 使用無服務器,StepFunction和StackStorm Exchange構建社區注冊應用 (Building a community sign-up app with Serverless, StepFunctions, and StackStorm Exchange) Build a real-world serverless applicatio…