md5用途:
md5不可逆的原因是其是一種雜湊函式,使用的是hash演算法,在計算過程中原文的部分資訊是丟失了的
2.防止直接看到明文:
現在很多**在資料庫儲存使用者的密碼的時候都是儲存使用者密碼的md5值。這樣就算不法分子得到資料庫的使用者密碼的md5值,也無法知道使用者的密碼。(比如在unix系統中使用者的密碼就是以md5(或其它類似的演算法)經加密後儲存在檔案系統中。當使用者登入的時候,系統把使用者輸入的密碼計算成md5值,然後再去和儲存在檔案系統中的md5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道使用者密碼的明碼的情況下就可以確定使用者登入系統的合法性。這不但可以避免使用者的密碼被具有系統管理員許可權的使用者知道,而且還在一定程度上增加了密碼被破解的難度。)
3.防止抵賴(數字簽名):
這需要乙個第三方認證機構。例如a寫了乙個檔案,認證機構對此檔案用md5演算法產生摘要資訊並做好記錄。若以後a說這檔案不是他寫的,權威機構只需對此檔案重新產生摘要資訊,然後跟記錄在冊的摘要資訊進行比對,相同的話,就證明是a寫的了。這就是所謂的「數字簽名」。
md5演算法過程:
對md5演算法簡要的敘述可以為:md5以512位分組來處理輸入的資訊,且每一分組又被劃分為16個32位子分組,經過了一系列的處理後,演算法的輸出由四個32位分組組成,將這四個32位分組級聯後將生成乙個128位雜湊值。
第一步、填充:如果輸入資訊的長度(bit)對512求餘的結果不等於448,就需要填充使得對512求餘的結果等於448。填充的方法是填充乙個1和n個0。填充完後,資訊的長度就為n*512+448(bit);
第二步、記錄首席資訊官度:用64位來儲存填充前首席資訊官度。這64位加在第一步結果的後面,這樣首席資訊官度就變為n*512+448+64=(n+1)*512位。
第三步、裝入標準的幻數(四個整數):標準的幻數(物理順序)是(a=(01234567)16,b=(89abcdef)16,c=(fedcba98)16,d=(76543210)16)。如果在程式中定義應該是:
(a=0x67452301l,b=0xefcdab89l,c=0x98badcfel,d=0x10325476l)。有點暈哈,其實想一想就明白了。
第四步、四輪迴圈運算:迴圈的次數是分組的個數(n+1)
1)將每一512位元組細分成16個小組,每個小組64位(8個位元組)
2)先認識四個線性函式(&是與,|是或,~是非,^是異或)
f(x,y,z)=(x&y)|((~x)&z)
g(x,y,z)=(x&z)|(y&(~z))
h(x,y,z)=x^y^z
i(x,y,z)=y^(x|(~z))
3)設mj表示訊息的第j個子分組(從0到15),<<
ff(a,b,c,d,mj,s,ti)表示a=b+((a+f(b,c,d)+mj+ti)<
4)四輪運算
5)每輪迴圈後,將a,b,c,d分別加上a,b,c,d,然後進入下一迴圈。
MD5演算法 加密
ps 在開發的某些業務中,涉及到一些明文不太安全的時候會用到加密演算法,常用的一般有md5加密 des aes 等加密方式這裡自己了解了一下md5加密。1 md5演算法加密 也就是 資訊 摘要演算法5 就是把乙個任意長度的位元組串變換成一定長的十六進製制數字串 public static strin...
MD5演算法實現
md5.h ifndef md5 h define md5 h typedef struct md5 ctx 非線性輔助函式 define f x,y,z x y x z define g x,y,z x z y z define h x,y,z x y z define i x,y,z y x z...
MD5演算法實現
md5.h ifndef md5 h define md5 h typedef struct md5 ctx 非線性輔助函式 define f x,y,z x y x z define g x,y,z x z y z define h x,y,z x y z define i x,y,z y x z...