chash加密
❶ hash加密為什麼不能破
Hash簡單點講就是把任意一段數據經過某種演算法生成一段唯一的固定長度的數據。也叫做摘要。為了確保數據A免受意外或者故意(惡意)的修改,往往用這段數據A產生一個hash數據一起發送出去,接收
Hash,一般翻譯做"散列",也有直接音譯為"哈希"的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。
簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
HASH主要用於信息安全領域中加密演算法,他把一些不同長度的信息轉化成雜亂的128位的編碼里,叫做HASH值. 也可以說,hash就是找到一種數據內容和數據存放地址之間的映射關系
了解了hash基本定義,就不能不提到一些著名的hash演算法,MD5 和 SHA1 可以說是目前應用最廣泛的Hash演算法,而它們都是以 MD4 為基礎設計的。那麼他們都是什麼意思呢?
這里簡單說一下:
1) MD4
MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年設計的,MD 是 Message Digest 的縮寫。它適用在32位字長的處理器上用高速軟體實現--它是基於 32 位操作數的位操作來實現的。
2) MD5
MD5(RFC 1321)是 Rivest 於1991年對MD4的改進版本。它對輸入仍以512位分組,其輸出是4個32位字的級聯,與 MD4 相同。MD5比MD4來得復雜,並且速度較之要慢一點,但更安全,在抗分析和抗差分方面表現更好
3) SHA1 及其他
SHA1是由NIST NSA設計為同DSA一起使用的,它對長度小於264的輸入,產生長度為160bit的散列值,因此抗窮舉(brute-force)性更好。SHA-1 設計時基於和MD4相同原理,並且模仿了該演算法。
那麼這些Hash演算法到底有什麼用呢?
Hash演算法在信息安全方面的應用主要體現在以下的3個方面:
1) 文件校驗
我們比較熟悉的校驗演算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗數據篡改的能力,它們一定程度上能檢測並糾正數據傳輸中的信道誤碼,但卻不能防止對數據的惡意破壞。
MD5 Hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種文件完整性校驗和(Checksum)演算法,不少Unix系統有提供計算md5 checksum的命令。
2) 數字簽名
Hash 演算法也是現代密碼體系中的一個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向散列函數扮演了一個重要的角色。 對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對文件本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。
3) 鑒權協議
如下的鑒權協議又被稱作"挑戰--認證模式:在傳輸信道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。
以上就是一些關於hash以及其相關的一些基本預備知識。那麼在emule裡面他具體起到什麼作用呢?
什麼是文件的hash值呢?
大家都知道emule是基於P2P (Peer-to-peer的縮寫,指的是點對點的意思的軟體), 它採用了"多源文件傳輸協議"(Mftp,the Multisource FileTransfer Protocol)。在協議中,定義了一系列傳輸、壓縮和打包還有積分的標准,emule 對於每個文件都有md5-hash的演算法設置,這使得該文件獨一無二,並且在整個網路上都可以追蹤得到。
MD5-Hash-文件的數字文摘通過Hash函數計算得到。不管文件長度如何,它的Hash函數計算結果是一個固定長度的數字。與加密演算法不同,這一個Hash演算法是一個不可逆的單向函數。採用安全性高的Hash演算法,如MD5、SHA時,兩個不同的文件幾乎不可能得到相同的Hash結果。因此,一旦文件被修改,就可檢測出來。
當我們的文件放到emule裡面進行共享發布的時候,emule會根據hash演算法自動生成這個文件的hash值,他就是這個文件唯一的身份標志,它包含了這個文件的基本信息,然後把它提交到所連接的伺服器。當有他人想對這個文件提出下載請求的時候, 這個hash值可以讓他人知道他正在下載的文件是不是就是他所想要的。尤其是在文件的其他屬性被更改之後(如名稱等)這個值就更顯得重要。而且伺服器還提供了,這個文件當前所在的用戶的地址,埠等信息,這樣emule就知道到哪裡去下載了.
一般來講我們要搜索一個文件,emule在得到了這個信息後,會向被添加的伺服器發出請求,要求得到有相同hash值的文件。而伺服器則返回持有這個文件的用戶信息。這樣我們的客戶端就可以直接的和擁有那個文件的用戶溝通,看看是不是可以從他那裡下載所需的文件。
對於emule中文件的hash值是固定的,也是唯一的,它就相當於這個文件的信息摘要,無論這個文件在誰的機器上,他的hash值都是不變的,無論過了多長時間,這個值始終如一,當我們在進行文件的下載上傳過程中,emule都是通過這個值來確定文件。
那麼什麼是userhash呢?
道理同上,當我們在第一次使用emule的時候,emule會自動生成一個值,這個值也是唯一的,它是我們在emule世界裡面的標志,只要你不卸載,不刪除config,你的userhash值也就永遠不變,積分制度就是通過這個值在起作用,emule裡面的積分保存,身份識別,都是使用這個值,而和你的id和你的用戶名無關,你隨便怎麼改這些東西,你的userhash值都是不變的,這也充分保證了公平性。其實他也是一個信息摘要,只不過保存的不是文件信息,而是我們每個人的信息。
那麼什麼是hash文件呢?
我們經常在emule日至裡面看到,emule正在hash文件,這里就是利用了hash演算法的文件校驗性這個功能了,文章前面已經說了一些這些功能,其實這部分是一個非常復雜的過程,目前在ftp,bt等軟體裡面都是用的這個基本原理,emule裡面是採用文件分塊傳輸,這樣傳輸的每一塊都要進行對比校驗,如果錯誤則要進行重新下載,這期間這些相關信息寫入met文件,直到整個任務完成,這個時候part文件進行重新命名,然後使用move命令,把它傳送到incoming文件裡面,然後met文件自動刪除,所以我們有的時候會遇到hash文件失敗,就是指的是met裡面的信息出了錯誤不能夠和part文件匹配,另外有的時候開機也要瘋狂hash,有兩種情況一種是你在第一次使用,這個時候要hash提取所有文件信息,還有一種情況就是上一次你非法關機,那麼這個時候就是要進行排錯校驗了。
❷ 哈希的演算法是什麼
哈希演算法是一個廣義的演算法,也可以認為是一種思想,使用Hash演算法可以提高存儲空間的利用率,可以提高數據的查詢效率,也可以做數字簽名來保障數據傳遞的安全性。所以Hash演算法被廣泛地應用在互聯網應用中。
哈希演算法也被稱為散列演算法,Hash演算法雖然被稱為演算法,但實際上它更像是一種思想。Hash演算法沒有一個固定的公式,只要符合散列思想的演算法都可以被稱為是Hash演算法。
特點:
加密哈希跟普通哈希的區別就是安全性,一般原則是只要一種哈希演算法出現過碰撞,就會不被推薦成為加密哈希了,只有安全度高的哈希演算法才能用作加密哈希。
同時加密哈希其實也能當普通哈希來用,Git 版本控制工具就是用 SHA-1 這個加密哈希演算法來做完整性校驗的。一般來講越安全的哈希演算法,處理速度也就越慢,所以並不是所有的場合都適合用加密哈希來替代普通哈希。
❸ 幾種常見的hash加密,怎麼判斷hash的類型
*nix系系統:
ES(Unix)
例子: IvS7aeT4NzQPM
說明:linux或者其他linux內核系統中
長度: 13 個字元
描述:第1、2位為salt,例子中的'Iv'位salt,後面的為hash值
系統:MD5(Unix)
例子:$1$12345678$XM4P3PrKBgKNnTaqG9P0T/
說明:Linux或者其他linux內核系統中
長度:34個字元
描述:開始的$1$位為加密標志,後面8位12345678為加密使用的salt,後面的為hash
加密演算法:2000次循環調用MD5加密
系統:SHA-512(Unix)
例子:$6$12345678$U6Yv5E1lWn6mEESzKen42o6rbEm
說明:Linux或者其他linux內核系統中
長度: 13 個字元
描述:開始的$6$位為加密標志,後面8位為salt,後面的為hash
加密演算法:5000次的SHA-512加密
系統:SHA-256(Unix)
例子:$5$12345678$jBWLgeYZbSvREnuBr5s3gp13vqi
說明:Linux或者其他linux內核系統中
長度: 55 個字元
描述:開始的$5$位為加密標志,後面8位為salt,後面的為hash
加密演算法:5000次的SHA-256加密
系統:MD5(APR)
例子:$apr1$12345678$auQSX8Mvzt.tdBi4y6Xgj.
說明:Linux或者其他linux內核系統中
長度:37個字元
描述:開始的$apr1$位為加密標志,後面8位為salt,後面的為hash
加密演算法:2000次循環調用MD5加密
windows系統:
windows
例子:Admin:
長度:98個字元
加密演算法:MD4(MD4(Unicode($pass)).Unicode(strtolower($username)))
mysql
系統:mysql
例子:606717496665bcba
說明:老版本的MySql中
長度:8位元組(16個字元)
說明:包括兩個位元組,且每個字的值不超過0x7fffffff
系統:MySQL5
例子:*
說明:較新版本的MySQL
長度:20位元組(40位)
加密演算法:SHA-1(SHA-1($pass))
其他系統:
系統:MD5(WordPress)
例子:$P$
說明:WordPress使用的md5
長度:34個字元
描述:$P$表示加密類型,然後跟著一位字元,經常是字元『B』,後面是8位salt,後面是就是hash
加密演算法:8192次md5循環加密
系統:MD5(phpBB3)
說明:phpBB 3.x.x.使用
例子:$H$9123456785DAERgALpsri.D9z3ht120
長度:34個字元
描述:開始的$H$為加密標志,後面跟著一個字元,一般的都是字元『9』,然後是8位salt,然後是hash 值
加密演算法:2048次循環調用MD5加密
系統:RAdmin v2.x
說明:Remote Administrator v2.x版本中
例子:
長度:16位元組(32個字元)
加密演算法:字元用0填充到100位元組後,將填充過後的字元經過md5加密得到(32位值)
md5加密
標准MD5
例子:
使用范圍:phpBB v2.x, Joomla 的 1.0.13版本前,及其他cmd
長度:16個字元
其他的加salt及變形類似:
md5($salt.$pass)
例子::12
md5(md5($pass))
例子:
md5(md5($pass).$salt)
例子::wQ6
md5(md5($salt).md5($pass))
例子: :wH6_S
md5(md5($salt).$pass)
例子: :1234
❹ 什麼是hash函數
哈希函數(Hash Function),也稱為散列函數,給定一個輸入 x ,它會算出相應的輸出 H(x) 。哈希函數的主要特徵是:
另外哈希函數一般還要求以下兩種特點:
1、免碰撞 :即不會出現輸入 x≠y ,但是H(x)=H(y) 的情況,其實這個特點在理論上並不成立,比如目前比特幣使用的 SHA256 演算法,會有 2^256 種輸出,如果我們進行 2^256 + 1 次輸入,那麼必然會產生一次碰撞,事實上,通過 理論證明 ,通過 2^130 次輸入就會有99%的可能性發生一次碰撞,不過即使如此,即便是人類製造的所有計算機自宇宙誕生開始一直運算到今天,發生一次碰撞的幾率也是極其微小的。
2、隱匿性 :也就是說,對於一個給定的輸出結果 H(x) ,想要逆推出輸入 x ,在計算上是不可能的。如果想要得到 H(x) 的可能的原輸入,不存在比窮舉更好的方法。
hash 演算法的原理是試圖將一個空間的數據集映射到另外一個空間(通常比原空間要小),並利用質數將數據集能夠均勻的映射。目前主流的 hash 演算法有: md4 、 md5 、 sha系列 。
MD4是麻省理工學院教授 Ronald Rivest 於1990年設計出來的演算法。其摘要長度為128位,一般用32位的十六進制來表示。
2004年8月清華大學教授王小雲,指出在計算MD4時可能發生雜湊沖撞。不久之後,Dobbertin 等人發現了MD4在計算過程中第一步和第三步中的漏洞,並向大家演示了如何利用一部普通電腦在幾分鍾內找到MD4中的沖突,毫無疑問,MD4就此被淘汰掉了。
1991年,Rivest 開發出技術上更為趨近成熟的MD5演算法,它在MD4的基礎上增加了"安全-帶子"(safety-belts)的概念。雖然 MD5 比 MD4 復雜度大一些,但卻更為安全。這個演算法很明顯的由四個和 MD4 設計有少許不同的步驟組成。
MD5 擁有很好的抗修改性,即對原數據進行任何改動,哪怕只修改1個位元組,所得到的MD5值都有很大區別。
MD5很好的用在了大文件的斷點續傳上:如果有一個 5MB 的文件 客戶端把它分割成5片 1MB 的文件 在上傳的時候上傳兩個 MD5 值,一個是當前上傳的文件片的 MD5 還有一個就是拼接之後的 MD5 (如果現在上傳的是第二片 這個MD5就應該是第一片加上第二片的MD5), 通過這樣的方式能保證文件的完整性。
當如果文件傳到一半斷了,伺服器可以通過驗證文件 MD5 值就可以得知用戶已經傳到了第幾片,並且知道之前上傳的文件有沒有發生變化,就可以判斷出用戶需要從第幾片開始傳遞。
不過在2004年8月的國際密碼學會議(Crypto』2004),王小雲提出了一種快速找到 MD5 碰撞的方法(參見其 論文 ),降低了 MD5 的安全性,人們開始尋求更加可靠的加密演算法。
SHA的全稱是Secure Hash Algorithm(安全hash演算法),SHA系列有五個演算法,分別是 SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512,由美國國家安全局(NSA)所設計,並由美國國家標准與技術研究院(NIST)發布,是美國的政府標准。後四者有時並稱為 SHA-2。SHA-1在許多安全協定中廣為使用,包括 TLS/SSL 等,是 MD5 的後繼者。
最初該演算法於1993年發布,稱做安全散列標准 (Secure Hash Standard),最初這個版本被稱為"SHA-0",它在發布之後很快就被NSA撤回,因為有很大的安全缺陷,之後在1995年發布了修訂版本,也就是SHA-1。
SHA-0 和 SHA-1 會從一個最大 2^64 位元的訊息中產生一串 160 位元的摘要,然後以 MD4 及 MD5 演算法類似的原理來加密。
2017年,谷歌發布了最新的研究成功,宣布攻破了SHA-1,並詳細描述了成功的SHA1碰撞攻擊方式,使用這種方式,可以在亞馬遜的雲計算平台上,耗時10天左右創建出SHA-1碰撞,並且成本可以控制在11萬美元以內。
即使如此,對於單台機器來說攻擊的成本依然很高,發生一次SHA-1碰撞需要超過 9,223,372,036,854,775,808 個SHA1計算,這需要使用你的機器進行6500年計算。
SHA2包括了SHA-224、SHA-256、SHA-384,和SHA-512,這幾個函數都將訊息對應到更長的訊息摘要,以它們的摘要長度(以位元計算)加在原名後面來命名,也就是說SHA-256會產生256位長度摘要。
SHA-2相對來說是安全的,至今尚未出現對SHA-2有效的攻擊!
由於目前大量的網站使用的SSL數字證數都是使用SHA-1簽名的,而SHA-1又已經不安全,各大瀏覽器廠商均宣布了棄用SHA-1的時間表:
可以看出,在時間表之後,如果檢測到網站的證書使用的還是SHA-1,就會彈出警告:
為了防止網站因出現上面的警告而顯得不專業,我們需要盡快的申請使用跟安全放心的基於SHA-2簽名的證書。
❺ hash加密後的密碼是多少位,還是說沒有固定位數啊
消息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前計算機領域用於確保信息傳輸完整一致而廣泛使用的雜湊演算法之一(又譯哈希演算法、摘要演算法等),主流編程語言普遍已有MD5的實現。
MD5是輸入不定長度信息,輸出固定長度128-bits的演演算法。經過程序流程,生成四個32位數據,最後聯合起來成為一個128-bits散列。基本方式為,求余、取余、調整長度、與鏈接變數進行循環運算。得出結果。
❻ hash的加密過程,
可以使用 System.Security.Cryptography 名稱空間中包含的加密資源方便地生成和比較哈希值。 因為所有哈希函數的輸入類型都是 Byte[],所以必須先將源數據轉換為位元組數組後再計算哈希值。 若要為一個字元串值創建哈希值,請按照下列步驟操作: 打開 Visual Studio .NET。 在 Microsoft C# 中新建控制台應用程序。Visual C# .NET 為您創建一個公用類以及一個空的 Main() 方法。 對 System、System.Security.Cryptography 和 System.Text 名稱空間使用 using 指令,這樣,在後面的代碼中就不需要限定這些名稱空間中的聲明了。這些語句必須放在所有其他聲明之前。 using System; using System.Security.Cryptography; using System.Text; 聲明一個字元串變數以存放源數據,並聲明兩個位元組數組(未定義大小)分別存放源位元組和得出的哈希值。 string sSourceData; byte[] tmpSource; byte[] tmpHash; 使用 GetBytes() 方法(它是 System.Text.ASCIIEncoding 類的成員)將源字元串轉換為位元組數組(這是哈希函數要求的輸入類型)。 sSourceData = "MySourceData"; //Create a byte array from source data. tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData); 通過在 MD5CryptoServiceProvider 類的一個實例上調用 ComputeHash 方法,來計算源數據的 MD5 哈希值。 注意,若要計算另一哈希值,需要另創建一個該類的實例。 //Compute hash based on source data. tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource); 此時,tmpHash 位元組數組中存放了計算源數據得出的哈希值(128 位值 = 16 個位元組)。 通常,將此類值顯示或存儲為一個十六進制字元串是非常有用的,如以下代碼所示: Console.WriteLine(ByteArrayToString(tmpHash)); static string ByteArrayToString(byte[] arrInput) { int i; StringBuilder sOutput = new StringBuilder(arrInput.Length); for (i=0;i < arrInput.Length -1; i++) { sOutput.Append(arrInput[i].ToString("X2")); } return sOutput.ToString(); } 保存並運行代碼,以查看計算源數值得出的十六進制字元串。 回到頂端比較兩個哈希值 從源數據創建哈希值的目的之一是,提供一種方法查看數據經過一段時間後是否會發生改變,或者在不使用實際值的情況下比較兩個值。 兩種情況都需要比較兩個哈希計算值,如果兩個值都存儲為十六進制字元串,則比較起來非常方便(如上一節中的最後一步所示)。 但是,兩個值很有可能都採用位元組數組的形式。 以下代碼(繼上一節中創建的代碼)演示了如何比較兩個位元組數組。 創建完十六進制字元串後,緊接著基於新的源數據創建一個新的哈希值。 sSourceData = "NotMySourceData"; tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData); byte[] tmpNewHash; tmpNewHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource); 比較兩個位元組數組的最直接的方法是,使用循環語句逐一比較兩個值中對應的數組元素。 如果任何元素不同,或者兩個數組的長度不同,則兩個值不相等。 bool bEqual = false; if (tmpNewHash.Length == tmpHash.Length) { int i=0; while ((i < tmpNewHash.Length) && (tmpNewHash[i] == tmpHash[i])) { i += 1; } if (i == tmpNewHash.Length) { bEqual = true; } } if (bEqual) Console.WriteLine("The two hash values are the same"); else Console.WriteLine("The two hash values are not the same"); Console.ReadLine(); 保存並運行項目,查看從第一個哈希值創建的十六進制字元串,然後檢查新的哈希值與原值是否相等。
-__________________________________________________________________________
在.net中,由 System.Security.Cryptography 命名空間提供了加密和哈希的幾個類。其中 md5 編碼由 MD5CryptoServiceProvider 實現。
在使用過程中由於 MD5CryptoServiceProvider 提供了多種方法去計算md5的hash值,反而令人搞不清楚,所以這里帖出計算md5的幾種常見方法先引用命名空間: using System.Security.Cryptography;
using System.Text; 然後:MD5CryptoServiceProvider md5=new MD5CryptoServiceProvider();string source="HelloWorld";
byte[] message;
message=Encoding.Default.GetBytes(source);//方法1
// 使用ComputeHash方法,適合用於計算簡單的字元串的md5值時
md5.ComputeHash(message);
Console.WriteLine(Convert.ToBase64String(md5.Hash));
//方法2
// 使用TransformFinalBlock方法,適合用於原始數據不多時
md5.Initialize();
md5.TransformFinalBlock(message,0,message.Length);
Console.WriteLine(Convert.ToBase64String(md5.Hash));
//方法3
// 此方法等同於方法2
md5.Initialize();
md5.TransformBlock(message,0,message.Length,
message,0); //note: output bytes must equal input bytes
md5.TransformFinalBlock(message,0,0);
Console.WriteLine(Convert.ToBase64String(md5.Hash));
//方法4
// 將原始消息分兩次編碼,得出的結果跟上面的一樣,適合用於計算大量原始數據時,例如計算一個文件的md5值
md5.Initialize();
message=Encoding.Default.GetBytes("Hello");
md5.TransformBlock(message,0,message.Length,
message,0);message=Encoding.Default.GetBytes("World");
md5.TransformFinalBlock(message,0,message.Length);
Console.WriteLine(Convert.ToBase64String(md5.Hash));
❼ HASH加密使用復雜的數字演算法來實現有效的加密,其演算法包括
java中使用Hash演算法:
import java.security.*;
public static String HashBase64(String str)
{
String ret="";
try {
//Hash演算法
MessageDigest sha = MessageDigest.getInstance("SHA-1");
sha.update(str.getBytes());
ret=new sun.misc.BASE64Encoder().encode(sha.digest());
}
catch (Exception e) {
System.out.print(e.getMessage());
}
return ret;
}
❽ bcrypt和hash加密演算法的區別
bcrypt,是一個跨平台的文件加密工具。由它加密的文件可在所有支持的操作系統和處理器上進行轉移。它的口令必須是8至56個字元,並將在內部被轉化為448位的密鑰。
Hash,一般翻譯做「散列」,也有直接音譯為「哈希」的,就是把任意長度的輸入(又叫做預映射, pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
❾ 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,有很多種組合,這就是最簡單的不可逆,所以只能通過暴力破解一個一個的試