1. 程式人生 > >MD5加密演算法的原理和應用

MD5加密演算法的原理和應用

MD5是一個安全的雜湊演算法,輸入兩個不同的明文不會得到相同的輸出值,根據輸出值,不能得到原始的明文,即其過程不可逆;所以要解密MD5沒有現成的演算法,只能用窮舉法,把可能出現的明文,用MD5演算法雜湊之後,把得到的雜湊值和原始的資料形成一個一對一的對映表,通過比在表中比破解密碼的MD5演算法雜湊值,通過匹配從對映表中找出破解密碼所對應的原始明文。

對資訊系統或者網站系統來說,MD5演算法主要用在使用者註冊口令的加密,對於普通強度的口令加密,可以通過以下三種方式進行破解:

1)線上查詢密碼。一些線上的MD5值查詢網站提供MD5密碼值的查詢,輸入MD5密碼值後,如果在資料庫中存在,那麼可以很快獲取其密碼值。

2)使用MD5破解工具。網路上有許多針對MD5破解的專用軟體,通過設定字典來進行破解。

3)通過社會工程學來獲取或者重新設定使用者的口令。

因此簡單的MD5加密是沒有辦法達到絕對的安全的,因為普通的MD5加密有多種暴力破解方式,因此如果想要保證資訊系統或者網站的安全,需要對MD5進行改造,增強其安全性,本文就是在MD5加密演算法的基礎上進行改進!

2.Md5演算法應用

2.1Md5加密原理

MD5512位分組來處理輸入的資訊,且每一分組又被劃分為1632位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成一個128位雜湊值。

MD5演算法中,首先需要對資訊進行填充,使其位元組長度對512求餘數的結果等於448。因此,資訊的位元組長度(Bits Length)將被擴充套件至N*512+448,即N*64+56個位元組(Bytes),N為一個正整數。填充的方法如下,在資訊的後面填充一個1和無數個0,直到滿足上面的條件時才停止用0對資訊的填充。然後再在這個結果後面附加一個以64位二進位制表示的填充前的資訊長度。經過這兩步的處理,現在的資訊位元組長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍數。這樣做的原因是為滿足後面處理中對資訊長度的要求。MD5中有四個32位被稱作連結變數(Chaining Variable
)的整數引數,他們分別為:A=0x01234567B=0x89abcdefC=0xfedcba98D=0x76543210當設定好這四個連結變數後,就開始進入演算法的四輪迴圈運算,迴圈的次數是資訊中512位資訊分組的數目。

將上面四個連結變數複製到另外四個變數中:AaBbCcDd主迴圈有四輪(MD4只有三輪),每輪迴圈都很相似。第一輪進行16次操作。每次操作對abcd中的其中三個作一次非線性函式運算,然後將所得結果加上第四個變數(文字中的一個子分組和一個常數)。

再將所得結果向右環移一個不定的數,並加上abcd中之一。最後用該結果取代abcd中之一。以一下是每次操作中用到的四個非線性函式(每輪一個)。

其中,?是異或,∧是與,∨是或,是反符號。

如果XYZ的對應位是獨立和均勻的,那麼結果的每一位也應是獨立和均勻的。F是一個逐位運算的函式。即,如果X,那麼Y,否則Z。函式H是逐位奇偶操作符。所有這些完成之後,將ABCD分別加上abcd。然後用下一分組資料繼續執行演算法,最後的輸出是ABCD的級聯。最後得到的ABCD就是輸出結果,A是低位,D為高位,DCBA組成128位輸出結果。

2.2 MD5的安全性

從安全的角度講,MD5的輸出為128,若採用純強力攻擊尋找一個訊息具有給定Hash值的計算困難性為2128,用每秒可試驗1000000000個訊息的計算機需時1.07×1022年。若採用生日攻擊法,尋找有相同Hash值的兩個訊息需要試驗264個訊息,用每秒可試驗1000000000個訊息的計算機需時585年。

2.3 Md5加密演算法的應用

MD5加密演算法由於其具有較好的安全性,加之商業也可以免費使用該演算法,因此該加密演算法被廣泛使用,md5演算法主要運用在數字簽名、檔案完整性驗證以及口令加密等方面。

3.改進後的加密方法

3.1目前md5加密方法利用的缺陷

在目前的資訊系統中,對md5加密方法的利用主要通過在指令碼頁面中引用包含md5加密函式程式碼的檔案,以asp指令碼為例,在需要呼叫的頁面中加入,md5.aspmd5加密函式程式碼檔案,然後直接呼叫函式MD5(sMessage)即可,md5加密後的值有16位和32位之分,如果在md5加密函式中使用的是MD5 = LCase(WordToHex(a) &WordToHex(b) & WordToHex(c) & WordToHex(d)),則表示是32位,如果使用的是MD5=LCase(WordToHex(b) & WordToHex(c)),則表示是16位。例如對明文為“123456”的值進行加密,其md5值有兩個,如下所示:

A=123456password=md5(A)= 49ba59abbe56e057 password=md5(A)=10adc3949ba59abbe56e057f20f883e如果將加密的md5值直接儲存在資料庫,當網站存在注入或者其它漏洞時,入侵者極有可能獲取使用者的密碼值,通過md5在如果將加密的md5值直接儲存在資料庫,當網站存在注入或者其它漏洞時,入侵者極有可能獲取使用者的密碼值,通過md5線上查詢或者暴力破解可以得到密碼。

3.2基於md5演算法的改進加密方法

本文提到的方法是在使用md5加密演算法對明文(口令)加密的基礎上,對密文進行了改變,在密文中擷取一段資料並丟棄,然後使用隨機函式填充被丟棄的資料,且整個過程不改變md5加密後的位數。其加密過程用演算法描述如下:

1)對明文password進行md5加密,獲得密文md5password)。

2)使用擷取函式擷取加密後的密文,從第beginnumber位置開始擷取number位數值,得到密碼A,其中A=left(md5password,beginnumber-1)

3)使用擷取函式擷取加密後的明文的number位數後的值B,其中 B=right(md5password),md5-digit -(beginnumber+number-1))

4)使用隨機函式gen_keynumber)填充被擷取的number的值。

5)變換後的密碼值為encrypt_password =A&get_key(number)&B

變數說明:

 

        解密過程跟加密過程有些類似,先對輸入的明文進行加密,接著從beginnumber處擷取前半部分得到A′,後半部分得到B′,然後從資料庫中讀出密碼中的AB部分,最後如果A=A′並且B=B′,則認為使用者輸入的密碼跟資料庫中的密碼是匹配的。

3.關鍵程式碼與實現

      本文提及改進方法關鍵實現程式碼如下:

 

     實現效果如圖1所示,需要加密時直接呼叫encrypt_password函式即可。

4.討論與結束語

         有人也曾經提出對md5加密演算法中的函式或者變數進行修改,從而加強在使用原md5演算法的安全,但是這種方法修改了md5原函式或者變數後,無法驗證修改後md5演算法在強度上是否跟原演算法一致。本文提出的方法是在原有md5加密的基礎上,通過對密文擷取一定位數的字串,並使用隨機數進行填充,最後得到的密文雖然是經過md5加密,但是其值已經大不一樣,因此通過md5常規破解方法是永遠也不能破解其原始密碼值,從而保證了資料的安全。雖然目前有很多攻擊方法,諸如SQL注入、跨站攻擊等,可以較容易的獲取資料庫中的值,通過本方法進行加密,在網站或者系統程式碼洩露前,其資料是相對安全的,因此具有一定參考加值。

相關推薦

bcrypt加密演算法原理應用

Question剛開始接觸這種加密方式,而又對加密原理不瞭解時,很容易產生這種疑問❔:    對一個密碼,bcryptjs每次生成的hash都不一樣,那麼它是如何進行校驗的?Basic verification    雖然對同一個密碼,每次生成的ha

MD5加密演算法原理及實現

1 #include "MD5.h" 2 3 /*4組計算函式*/ 4 inline unsigned int F(unsigned int X, unsigned int Y, unsigned int Z) 5 { 6 return (X & Y) | ((~

人工神經網路演算法原理應用

人工神經網路 什麼是人工神經網路? 我們先從他的結構談起 說明: 通常一個神經網路由一個input layer,多個hidden layer和一個output layer構成。圖中圓圈可以視為一個神經元(又可以稱為感知器)設計神經網路的重要工作是設計hidden layer,及神經元之間的權重新增

[C++] MD5加密演算法原理及實現

參考文獻: 1. RFC1321 - R. Rivest 2. 中山大學 蔡國揚 老師的 Web安全課件 演算法概述 MD5 使用 little-endian,輸入任意不定長度資訊,以 512 位長進行分組,生成四個32位資料,最後

​​​​​​​MD5加密演算法原理及實現

MD5訊息摘要演算法,屬Hash演算法一類。MD5演算法對輸入任意長度的訊息進行執行,產生一個128位的訊息摘要。 以下所描述的訊息長度、填充資料都以位(Bit)為單位,位元組序為小端位元組。 演算法原理 1、資料填充 對訊息進行資料填充,使訊息的長度對512取模得4

DES、AES、RSA、MD5加密演算法辨析與應用場景

資訊保安Cryptographic Techniques 對稱加密演算法 Data Encryption Standard(DES) DES 是一種典型的塊加密方法:將固定長度的明文通過一系列複雜的操作變成同樣長度的密文,塊的長度為64位。同時,DE

MD5加密演算法原理及其Go語言實現

MD5訊息摘要演演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位元(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。 go 呼叫 md5 方法 新建 m

MD5加密演算法原理應用

MD5是一個安全的雜湊演算法,輸入兩個不同的明文不會得到相同的輸出值,根據輸出值,不能得到原始的明文,即其過程不可逆;所以要解密MD5沒有現成的演算法,只能用窮舉法,把可能出現的明文,用MD5演算法雜湊之後,把得到的雜湊值和原始的資料形成一個一對一的對映表,通過比在表中比

Md5加密演算法原理應用

MD5是一個安全的雜湊演算法,輸入兩個不同的明文不會得到相同的輸出值,根據輸出值,不能得到原始的明文,即其過程不可逆;所以要解密MD5沒有現成的演算法,只能用窮舉法,把可能出現的明文,用MD5演算法雜湊之後,把得到的雜湊值和原始的資料形成一個一對一的對映表,通過比在表中比

R語言統計分析技術研究——嶺回歸技術的原理應用

gts 根據 誤差 med 分享 jce not -c rt4 嶺回歸技術的原理和應用

MD5加密(javac#)

service int print cnblogs return pan Coding pro pre java代碼 public static String md5(String str) { try { MessageDiges

基於數值分析思想對多項式求值的原理應用進行探究

數值分析 use com 相加 emp 要花 class RoCE size 摘要:多項式是由多個單項(符號項如:5x或者常數項4)通過四則運算組合起來的式子,如P(x)=2x^4+3x^3-3x^2+5x-1 一般的求解會將特定的x代入到上式中,一個一個的計算,共需要

JAVA RMI分布式原理應用

讀取 create host 實現邏輯 傳遞 not 綁定 per args RMI(Remote Method Invocation)是JAVA早期版本(JDK 1.1)提供的分布式應用解決方案,它作為重要的API被廣泛的應用在EJB中。隨著互聯網應用的發展,分布式

Alluxio原理應用場景隨筆

    上週末有幸參加了Alluxio(之前也叫Tachyon),七牛雲和示說網舉辦的Alluxio上海Meetup,之前我並沒有在真實應用場景中使用過Alluxio,對其適用的應用場景一直報懷疑態度。自信聆聽其創始人的演講之後,感覺這個專案還挺有意思,對Alluxio簡單總結一下:

安全不安全003:C#實現MD5加密演算法

MD5是一種資訊-摘要演算法,一種單向函式演算法(也就是HASH演算法)。將不同輸入長度的資訊進行雜湊計算,得到固定長度的輸出。它的主要特點是,不可逆 和唯一性。即不能由結果計算出輸入值;且不同的輸入值計算得到的固定長度輸出是唯一的。 目前使用的面向物件程式語言中,基本都有類庫實現好的MD5方法

iOS 編譯過程的原理應用

來源:黃文臣  blog.csdn.net/hello_hwc/article/details/53557308 前言 一般可以將程式語言分為兩種,編譯語言和直譯式語言。 像C++,Objective C都是編譯語言。編譯語言在執行

區塊鏈教程區塊鏈背後的資訊保安2DES、3DES加密演算法原理

Feistel輪函式 每次Feistel輪函式內部,均經過4種運算,即: 1、擴充套件置換:右側32位做擴充套件置換,擴充套件置換將32位輸入擴充套件成為48位輸出,使得擴充套件後輸出資料長度與48位子金鑰等長。 2、異或運算:右側32位擴充套件置換為48位後,與48位子金鑰做異或運算。 3

視訊影象的超解析度技術原理應用場景

前言 影象和視訊通常包含著大量的視覺資訊,且視覺資訊本身具有直觀高效的描述能力,所以隨著資訊科技的高速發展,影象和視訊的應用逐漸遍佈人類社會的各個領域。近些年來,在計算機 影象處理、計算機視覺和機器學習等 領域中,來自工業界和學術界的許多學者和專家都持續關注著視訊影象的超解析度技術這個基

分享《深度學習與計算機視覺演算法原理框架應用》《大資料架構詳解從資料獲取到深度學習》PDF資料集

下載:https://pan.baidu.com/s/12-s95JrHek82tLRk3UQO_w 更多資料分享:http://blog.51cto.com/3215120 《深度學習與計算機視覺 演算法原理、框架應用》PDF,帶書籤,347頁。《大資料架構詳解:從資料獲取到深度學習》PDF,帶書籤,3

分享《深度學習與計算機視覺演算法原理框架應用》PDF《大資料架構詳解從資料獲取到深度學習》PDF +資料集

下載:https://pan.baidu.com/s/12-s95JrHek82tLRk3UQO_w 更多分享資料:https://www.cnblogs.com/javapythonstudy/ 《深度學習與計算機視覺 演算法原理、框架應用》PDF,帶書籤,347頁。《大資料架構詳解:從資料獲取到深度學