導航:首頁 > 源碼編譯 > 散列演算法

散列演算法

發布時間:2022-02-06 06:44:06

⑴ 散列函數有哪些特點

所有散列函數都有如下一個基本特性:如果兩個散列值是不相同的(根據同一函數),那麼這兩個散列值的原始輸入也是不相同的.這個特性是散列函數具有確定性的結果.但另一方面,散列函數的輸入和輸出不是一一對應的,如果兩個散列值相同,兩個輸入值很可能是相同的,但並不能絕對肯定二者一定相等.輸入一些數據計算出散列值,然後部分改變輸入值,一個具有強混淆特性的散列函數會產生一個完全不同的散列值.
典型的散列函數都有無限定義域,比如任意長度的位元組字元串,和有限的值域,比如固定長度的比特串.在某些情況下,散列函數可以設計成具有相同大小的定義域和值域間的一一對應.一一對應的散列函數也稱為排列.可逆性可以通過使用一系列的對於輸入值的可逆「混合」運算而得到.

⑵ 散列演算法的概念

在信息安全技術中,經常需要驗證消息的完整性,散列(Hash)函數提供了這一服務,它對不同長度的輸入消息,產生固定長度的輸出。這個固定長度的輸出稱為原輸入消息的「散列」或「消息摘要」(Message digest)。一個安全的哈希函數H必須具有以下屬性:
l)H能夠應用到大小不一的數據上。
2)H能夠生成大小固定的輸出。
3)對於任意給定的x,H(x)的計算相對簡單。
4)對於任意給定的代碼h,要發現滿足H(x)=h的x在計算上是不可行的。
5) 對於任意給定的塊x,要發現滿足H(y)=H(x)而y=x在計算上是不可行的。
6)要發現滿足H(X)=H(y)的(X,y)對在計算上是不可行的

⑶ 散列法的散列演算法

也稱為哈希函數——哈希的英文意思為「無用信息」,因此哈希函數一詞的由來可能是因為最終形成的哈希表裡面是各種看起來毫無意義的描述值的混合。除用來快速搜索數據外,散列法還用來完成簽名的加密解密工作,這種簽名可以用來對收發消息時的用戶簽名進行鑒權。先用哈希函數對數據簽名進行轉換,然後將數字簽名本身和轉換後的信息摘要分別獨立的發送給接收人。通過利用和發送人一樣的哈希函數,接收人可以從數字簽名獲得一個信息摘要,然後將此摘要同傳送過來的摘要進行比較,這兩個值相等則表示數字簽名有效。
利用哈希函數對資料庫中的原始值建立索引,以後每獲取一次數據時都要利用哈希函數進行重新轉換。因此,哈希函數始終是單向操作。沒有必要通過分析哈希值來試圖逆推哈希函數。實際上,一個典型的哈希函數是不可能逆推出來的。好的哈希函數還應該避免對於不同輸入產生相同的哈希值的情況發生。如果產生了哈希值相同的情況,稱為沖突。可接受的哈希函數應該將沖突情況的可能性降到非常小。

⑷ 散列演算法和加密演算法的區別

對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密演算法處理後,使其變成復雜的加密密文發送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文。在對稱加密演算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。不足之處是,交易雙方都使用同樣鑰匙,安全性得不到保證。此外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的惟一鑰匙,這會使得發收信雙方所擁有的鑰匙數量成幾何級數增長,密鑰管理成為用戶的負擔。對稱加密演算法在分布式網路系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。在計算機專網系統中廣泛使用的對稱加密演算法有DES、IDEA和AES。

⑸ 散列演算法是怎麼實現的

散列函數把消息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來。該函數將數據打亂混合,重新創建一個叫做散列值的指紋。散列值通常用來代表一個短的隨機字母和數字組成的字元串。好的散列函數在輸入域中很少出現散列沖突。在散列表和數據處理中,不抑制沖突來區別數據,會使得資料庫記錄更難找到。

⑹ 單向散列演算法的應用

在如今廣泛使用的乙太網中,報文的發送方會在乙太網消息的末尾加上一個CRC(Cyclic Rendancy Check,循環冗餘校驗)欄位,用來給接收方驗證該消息的完整性,具體做法是:
1、消息發送方計算出消息的校驗和並將其隨消息一起發送。
2、接收方根據收到的消息重新計算校驗和,並將其與直接收到的校驗和相比較。如果兩者不同,接收方就認為消息在傳送過程中受損(如電信號受干擾出錯),要求發送方重新發送。
這種方式被廣泛使用到基於TCP/IP的多種通信協議中。大多數情況下,我們可以簡單地將CRC看成是單向散列演算法(函數)的一種應用。 經常在網站下載軟體的人會留意這樣一件事兒,在下載頁面,網站會提供這個下載數據包的MD5值。這樣的一個值就是網站使用MD5演算法對下載的目標數據進行計算得到的一個散列值。如果攻擊者攻破這個網站,在給用戶下載的數據包中插入一些惡意代碼或病毒,那麼使用MD5演算法計算得到的MD5散列值肯定發生了變化。
當這些被篡改的數據包被用戶下載之後,用戶只要執行MD5演算法得到下載數據包的MD5散列值,與網站上公布的正常的MD5值對比。如果MD5值兩者不同,表示正常的數據包被篡改了,就不要使用該數據包;如果兩者一致,表示數據包沒有被篡改,就能放心使用該數據包。
那麼攻擊者必須能調整代碼的其他部分,使MD5的輸出與以前相同。但MD5是專門為防止這種攻擊而設計的,因此任何人下載了修改過的文件後,通過檢查MD5散列值都將發現文件已不是原來的。

⑺ 什麼是安全散列演算法SHA256

安全散列演算法SHA(Secure Hash Algorithm)是美國國家安全局 (NSA) 設計,美國國家標准與技術研究院(NIST) 發布的一系列密碼散列函數,包括 SHA-1、SHA-224、SHA-256、SHA-384 和 SHA-512 等變體。主要適用於數字簽名標准(DigitalSignature Standard DSS)裡面定義的數字簽名演算法(Digital Signature Algorithm DSA)。下面以 SHA-1為例,介紹該演算法計算消息摘要的原理。
對於長度小於2^64位的消息,SHA1會產生一個160位的消息摘要。當接收到消息的時候,這個消息摘要可以用來驗證數據的完整性。在傳輸的過程中,數據很可能會發生變化,那麼這時候就會產生不同的消息摘要。
SHA1有如下特性:不可以從消息摘要中復原信息;兩個不同的消息不會產生同樣的消息摘要。
一、術語和概念
(一)位(Bit),位元組(Byte)和字(Word)
SHA1始終把消息當成一個位(bit)字元串來處理。本文中,一個「字」(Word)是32位,而一個「位元組」(Byte)是8位。比如,字元串「abc」可以被轉換成一個位字元串:01100001 01100010 01100011。它也可以被表示成16進制字元串:0x616263.
(二)運算符和符號
下面的邏輯運算符都被運用於「字」(Word)
X^Y = X,Y邏輯與
X \/ Y = X,Y邏輯或
X XOR Y= X,Y邏輯異或
~X = X邏輯取反
X+Y定義如下:
字 X 和Y 代表兩個整數 x 和y, 其中0 <= x < 2^32 且 0 <= y < 2^32. 令整數z= (x + y) mod 2^32. 這時候 0 <= z < 2^32. 將z轉換成字Z,那麼就是 Z = X + Y.
循環左移位操作符Sn(X)。X是一個字,n是一個整數,0<=n<=32。Sn(X)= (X<>32-n)
X<定義如下:拋棄最左邊的n位數字,將各個位依次向左移動n位,然後用0填補右邊的n位(最後結果還是32位)。X>>n是拋棄右邊的n位,將各個位依次向右移動n位,然後在左邊的n位填0。因此可以叫Sn(X)位循環移位運算
二、SHA1演算法描述
在SHA1演算法中,我們必須把原始消息(字元串,文件等)轉換成位字元串。SHA1演算法只接受位作為輸入。假設我們對字元串「abc」產生消息摘要。首先,我們將它轉換成位字元串如下:
01100001 0110001001100011
―――――――――――――
『a』=97 『b』=98『c』=99
這個位字元串的長度為24。下面我們需要5個步驟來計算MD5。
(一)補位
消息必須進行補位,以使其長度在對512取模以後的余數是448。也就是說,(補位後的消息長度)%512 = 448。即使長度已經滿足對512取模後余數是448,補位也必須要進行。
補位是這樣進行的:先補一個1,然後再補0,直到長度滿足對512取模後余數是448。總而言之,補位是至少補一位,最多補512位。還是以前面的「abc」為例顯示補位的過程。
原始信息:01100001 01100010 01100011
補位第一步:0110000101100010 01100011 1
首先補一個「1」
補位第二步:0110000101100010 01100011 10…..0
然後補423個「0」
我們可以把最後補位完成後的數據用16進制寫成下面的樣子
61626380 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 00000000
現在,數據的長度是448了,我們可以進行下一步操作。
(二)補長度
所謂的補長度是將原始數據的長度補到已經進行了補位操作的消息後面。通常用一個64位的數據來表示原始消息的長度。如果消息長度不大於2^64,那麼第一個字就是0。在進行了補長度的操作以後,整個消息就變成下面這樣了(16進制格式)
61626380 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 00000018
如果原始的消息長度超過了512,我們需要將它補成512的倍數。然後我們把整個消息分成一個一個512位的數據塊,分別處理每一個數據塊,從而得到消息摘要。
(三)使用的常量
一系列的常量字K(0),K(1), ... , K(79),如果以16進制給出。它們如下:
Kt = 0x5A827999 (0<= t <= 19)
Kt = 0x6ED9EBA1 (20<= t <= 39)
Kt = 0x8F1BBCDC (40<= t <= 59)
Kt = 0xCA62C1D6 (60<= t <= 79).
(四)需要使用的函數
在SHA1中我們需要一系列的函數。每個函數ft (0 <= t <= 79)都操作32位字B,C,D並且產生32位字作為輸出。ft(B,C,D)可以如下定義
ft(B,C,D) = (B ANDC) or ((NOT B) AND D) ( 0 <= t <= 19)
ft(B,C,D) = B XOR CXOR D (20 <= t <= 39)
ft(B,C,D) = (B ANDC) or (B AND D) or (C AND D) (40 <= t <= 59)
ft(B,C,D) = B XOR CXOR D (60 <= t <= 79).
(五)計算消息摘要
必須使用進行了補位和補長度後的消息來計算消息摘要。計算需要兩個緩沖區,每個都由5個32位的字組成,還需要一個80個32位字的緩沖區。第一個5個字的緩沖區被標識為A,B,C,D,E。第二個5個字的緩沖區被標識為H0,H1, H2, H3, H4。80個字的緩沖區被標識為W0,W1,..., W79
另外還需要一個一個字的TEMP緩沖區。
為了產生消息摘要,在第4部分中定義的16個字的數據塊M1,M2,..., Mn
會依次進行處理,處理每個數據塊Mi 包含80個步驟。
在處理每個數據塊之前,緩沖區{Hi} 被初始化為下面的值(16進制)
H0 = 0x67452301
H1 = 0xEFCDAB89
H2 = 0x98BADCFE
H3 = 0x10325476
H4 = 0xC3D2E1F0.
現在開始處理M1, M2,... , Mn。為了處理 Mi,需要進行下面的步驟
(1). 將Mi 分成 16 個字 W0, W1, ... , W15,W0 是最左邊的字
(2). 對於t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8XOR Wt- 14 XOR Wt-16).
(3). 令A = H0, B = H1, C = H2, D = H3, E = H4.
(4) 對於t = 0 到 79,執行下面的循環
TEMP = S5(A) +ft(B,C,D) + E + Wt + Kt;
E = D; D = C; C =S30(B); B = A; A = TEMP;
(5). 令H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.
在處理完所有的 Mn, 後,消息摘要是一個160位的字元串,以下面的順序標識
H0 H1 H2 H3 H4.
對於SHA256、SHA384、SHA512。你也可以用相似的辦法來計算消息摘要。對消息進行補位的演算法完全是一樣的。
三、SHA演算法被破解了嗎?
2013年9月10日美國約翰霍普金斯大學的計算機科學教授,知名的加密演算法專家,Matthew Green被NSA要求刪除他的一份關於破解加密演算法的與NSA有關的博客。 同時約翰霍普金斯大學伺服器上的該博客鏡像也被要求刪除。

加密演算法專家,美國約翰霍普金斯大學教授Matthew Green
但當記者向該大學求證時,該校稱從未收到來自NSA的要求要刪除博客或鏡像的資料,但記者卻無法在原網址再找到該博客。幸運的是,從谷歌的緩存可以找到該博客。該博客提到NSA每年花費2.5億美元來為自己在解密信息方面獲取優勢,並列舉了NSA的一系列見不得人的做法。

在BitcoinTalk上,已經掀起了一輪爭論:到底SHA-2是否安全?
部分認為不安全的觀點包括:
NSA製造了sha-2, 我們不相信NSA,他們不可能不留後門。
棱鏡事件已經明白的告訴我們,政府會用一切可能的手段來監視與解密。
雖然有很多人會研究SHA-2,且目前沒有公開的證據表明有漏洞。但沒有公開這並不能代表就沒有,因為發現漏洞的人一定更傾向於保留這個秘密來自己利用,而不是公布。
部分認為安全的觀點包括:
SHA-2是應用廣泛的演算法,應該已經經歷了實踐的檢驗。
美國的對頭中國和俄國都有很多傑出的數學家,如果有問題的話,他們肯定已經發現了。
如果真的不安全,世界上安全的東西就太少了,我不能生活在提心吊膽里,所以我選擇相信安全。

⑻ 什麼叫散列函數

單向散列函數是進行數據加密/編碼的一種演算法
單向散列函數一般用於產生消息摘要,密鑰加密等,常見的有:
md5(message
digest
algorithm
5):是rsa數據安全公司開發的一種單向散列演算法,md5被廣泛使用,可以用來把不同長度的數據塊進行暗碼運算成一個128位的數值;
sha(secure
hash
algorithm)這是一種較新的散列演算法,可以對任意長度的數據運算生成一個160位的數值;
mac(message
authentication
code):消息認證代碼,是一種使用密鑰的單向函數,可以用它們在系統上或用戶之間認證文件或消息。hmac(用於消息認證的密鑰散列法)就是這種函數的一個例子。
crc(cyclic
rendancy
check):循環冗餘校驗碼,crc校驗由於實現簡單,檢錯能力強,被廣泛使用在各種數據校驗應用中。佔用系統資源少,用軟硬體均能實現,是進行數據傳輸差錯檢測地一種很好的手段(crc
並不是嚴格意義上的散列演算法,但它的作用與散列演算法大致相同,所以歸於此類)。

⑼ 單向散列演算法的介紹

單向散列演算法,又稱hash函數,Hash函數(也稱雜湊函數或雜湊演算法)就是把任意長的輸入消息串變化成固定長的輸出串的一種函數。這個輸出串稱為該消息的雜湊值。一般用於產生消息摘要,密鑰加密等。

⑽ 一個安全的散列演算法需要具備哪些屬性

一個安全的散列演算法需要具備的屬性:
1、能對抗野蠻的攻擊,能夠抵禦窮舉法的攻勢。
2、具有無限定義域,如任意長度的位元組字元串和有限的值域或者固定長度的比特串。
3、具備應用的多樣性,對於給定的散列值,沒有實用的方法可以計算出一個原始輸入,也就是說很難偽造。
4、能夠因為環境因素的變化,如機器配置或者IP地址的改變而有變動。以保證源文件的安全性。
5、方便錯誤監測和修復函數。當散列函數被用於校驗和的時候可以用相對較短的散列值來驗證任意長度的數據是否被更改過。
6、安全散列演算法接受的輸入文檔小於2的64次方 位,產生160位的報文摘要。該演算法實際的目標使得找出一個能夠匹配給定的散列值的文本是不可能的計算。

閱讀全文

與散列演算法相關的資料

熱點內容
cad輸入命令時滑鼠卡頓 瀏覽:791
php過濾文件 瀏覽:751
linux配置ip命令 瀏覽:903
命令的英文怎麼讀 瀏覽:353
哪個app是自己彈音樂的 瀏覽:655
安卓變是什麼意思 瀏覽:612
qq五子棋在哪裡找app 瀏覽:837
圖片活碼二維碼生成器網站源碼 瀏覽:186
國美手機聯系人加密 瀏覽:883
成交量彩色源碼 瀏覽:118
演算法最根本的評價標准 瀏覽:366
個人資源app哪個好用 瀏覽:580
這也能切為什麼沒有安卓 瀏覽:675
可可64山寨源碼 瀏覽:641
怎麼自己解壓和釋放 瀏覽:991
思路與演算法的區別 瀏覽:156
日誌帶源碼 瀏覽:137
php怎麼打包 瀏覽:758
大照丟了如何解壓 瀏覽:654
路由器保存命令 瀏覽:129