當前位置:首頁 » 密碼管理 » hash得出的加密值

hash得出的加密值

發布時間: 2022-09-07 19:18:37

A. 密碼學HASH與對稱加密

Hash,一般翻譯做「散列」,也有直接音譯為「哈希」的,就是把任意長度的輸入通過散列演算法變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來確定唯一的輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。

MD5信息摘要演算法 (英語:MD5 Message-Digest Algorithm),一種被廣泛使用的 密碼散列函數 ,可以產生出一個128位(16 位元組 )的散列值(hash value),用於確保信息傳輸完整一致。2004年,證實MD5演算法無法防止碰撞(collision)(如網站: CMD5 ),因此不適用於安全性認證,如 SSL 公開密鑰認證或是 數字簽名 等用途。

MD5 是哈希演算法的一種。

密碼加密常見的有以下幾種方式:

HMAC是密鑰相關的哈希運算消息認證碼(Hash-based Message Authentication Code)的縮寫,並在 IPSec 和其他網路協議(如 SSL )中得以廣泛應用,現在已經成為事實上的Internet安全標准。它可以與任何迭代散列函數捆綁使用。

如上圖中,共有兩個流程:

授權設備登錄流程:
1、輸入賬號過後,就把賬號作為參數向伺服器發送請求
2、伺服器根據賬號生成對應的key,並傳遞給客戶端
3、客戶端拿到key,進行HMAC運算,並將運算結果的哈希值傳給伺服器

其他設備登錄流程:
1、輸入賬號過後,在本地緩存中找伺服器傳過來的key,有就登錄,沒有就把賬號作為參數向伺服器發送請求
2、伺服器要先看這個賬號是否開啟了設備鎖,沒有開啟就不允許登錄,開啟了,就向授權設備發送請求,是否授權,如果授權,就將這個賬號的key傳給其他客戶端
3、客戶端拿到key,進行HMAC運算,並將運算結果的哈希值傳給伺服器

但是在這之中有一個潛在的安全隱患問題: 當別人拿到賬號和傳遞的哈希值過後,也就能拿到登錄許可權,從而不安全。

為了防止上面的問題,注冊流程不變,伺服器還是保存的有加了key的HMAC哈希值。
1、只是登錄的時候,客戶端將哈希值與時間戳拼接過後,進行MD5加密,再傳給伺服器。
2、伺服器將注冊保存的賬號對應的HMAC哈希值,分別與當前時間,和前一分鍾拼接再MD5加密,再和客戶端傳過來的進行匹配,匹配成功則登錄成功,否則不成功。
3、注意這里的時間戳是伺服器給的時間戳。

常見的加密演算法:

應用模式:

AES加密解密都是用到的CCCrypt函數,並且需要導入 CommonCrypto 框架。

B. 哈希值是什麼

哈希值,又稱:散列函數是一種從任何一種數據中創建小的數字「指紋」的方法。

散列函數把消息或數據壓縮成摘要,使得數據量變小,將數據的格式固定下來。該函數將數據打亂混合,重新創建一個叫做散列值的指紋。

散列值通常用一個短的隨機字母和數字組成的字元串來代表。好的散列函數在輸入域中很少出現散列沖突。在散列表和數據處理中,不抑制沖突來區別數據,會使得資料庫記錄更難找到。

(2)hash得出的加密值擴展閱讀:

哈希值的性質:

所有散列函數都有如下一個基本特性:如果兩個散列值是不相同的(根據同一函數),那麼這兩個散列值的原始輸入也是不相同的。

這個特性是散列函數具有確定性的結果,具有這種性質的散列函數稱為單向散列函數。但另一方面,散列函數的輸入和輸出不是唯一對應關系的,如果兩個散列值相同,兩個輸入值很可能是相同的。

但也可能不同,這種情況稱為「散列碰撞(collision)」,這通常是兩個不同長度的輸入值,刻意計算出相同的輸出值。

輸入一些數據計算出散列值,然後部分改變輸入值,一個具有強混淆特性的散列函數會產生一個完全不同的散列值。

典型的散列函數都有非常大的定義域,比如SHA-2最高接受(2-1)/8長度的位元組字元串。同時散列函數一定有著有限的值域,比如固定長度的比特串。

在某些情況下,散列函數可以設計成具有相同大小的定義域和值域間的單射。散列函數必須具有不可逆性。

C. hash加密後的密碼是多少位,還是說沒有固定位數啊

消息摘要演算法第五版(英語:Message-Digest Algorithm 5,縮寫為MD5),是當前計算機領域用於確保信息傳輸完整一致而廣泛使用的雜湊演算法之一(又譯哈希演算法、摘要演算法等),主流編程語言普遍已有MD5的實現。

MD5是輸入不定長度信息,輸出固定長度128-bits的演演算法。經過程序流程,生成四個32位數據,最後聯合起來成為一個128-bits散列。基本方式為,求余、取余、調整長度、與鏈接變數進行循環運算。得出結果。

D. 對於加密的總結(AES,RSA)

跟第三方聯調的時候會碰到各種加密演算法,所以總結一下。

AES不是將拿到的明文一次性加密,而是分組加密,就是先將明文切分成長度相等的塊,每塊大小128bit,再對每一小塊進行加密。那麼問題就來了,並不是所有的原始明文串能被等分成128bit,例如原串大小200bit,那麼第二個塊只有72bit,所以就需要對第二個塊進行填充處理,讓第二個塊的大小達到128bit。常見的填充模式有

不進行填充,要求原始加密串大小必須是128bit的整數倍;

假設塊大小8位元組,如果這個塊跟8位元組還差n個位元組,那麼就在原始塊填充n,直到滿8位元組。例:塊{1,2,3},跟8位元組差了5個位元組,那麼補全後的結果{1,2,3,5,5,5,5,5}後面是五個5,塊{1,2,3,..7}跟8位元組差了1個位元組,那麼補全後就是{1,2,3,...,7,1},就是補了一個1。

如果恰好8位元組又選擇了PKCS5Padding填充方式呢?塊{1,2,3...8}填充後變成{1,2,3...8,8...8},原串後面被補了8個8,這樣做的原因是方便解密,只需要看最後一位就能算出原塊的大小是多少。

跟PKCS5Padding的填充方式一樣,不同的是,PKCS5Padding只是對8位元組的進行填充,PKCS7Padding可以對1~256位元組大小的block進行填充。openssl里aes的默認填充方式就是PKCS7Padding

AES有多種加密模式,包括:ECB,CBC,CTR,OCF,CFB,最常見的還是ECB和CBC模式。

最簡單的一種加密模式,每個塊進行獨立加密,塊與塊之間加密互不影響,這樣就能並行,效率高。
雖然這樣加密很簡單,但是不安全,如果兩個塊的明文一模一樣,那麼加密出來的東西也一模一樣。

openssl的相關函數:

CBC模式中引入了一個新的概念,初始向量iv。iv的作用就是為了防止同樣的明文塊被加密成同樣的內容。原理是第一個明文塊跟初始向量做異或後加密,第二個塊跟第一個密文塊做異或再加密,依次類推,避免了同樣的塊被加密成同樣的內容。

openssl相關函數:

敲黑板!! 所以跟第三方對接的時候,如果對面說他們用aes加密,務必對他們發起靈魂三問:

簽名的作用是讓接受方驗證你傳過去的數據沒有被篡改;加密的作用是保證數據不被竊取。

原理:你有一個需要被驗簽的原串A。

步驟一:選擇hash演算法將A進行hash得到hash_a;

步驟二:將hash_a進行加密,得到加密值encrypt_a;

步驟三:將原串A和加密的encrypt_a發給第三方,第三方進行驗簽。第三方先解密encrypt_a,得到一個hash值hash_a1,然後對原串A使用同樣的hash演算法進行hash,得到的即為加密前的hash_a,如果hash_a = hash_a1, 那麼驗簽成功。

rsa使用私鑰對信息加密來做簽名,使用公鑰解密去驗簽。
openssl相關函數:

注意:兩個函數中的m,是原串hash後的值,type表示生成m的演算法,例如NID_sha256表示使用sha256對原串進行的hash,返回1為簽名成功或者驗簽成功,-1位為失敗。

再次敲黑板!! 所以如果第三方說使用rsa驗簽,要讓對方告知他們的hash演算法。

首先明確,私鑰加密不等於簽名。加密的時候,使用使用公鑰加密,第三方使用你的私鑰進行解密。
openssl里公鑰加密函數為RSA_public_encrypt,私鑰解密函數為RSA_private_decrypt,具體的可以自己去查看下官方文檔。

rsa也涉及到了填充方式,所以對接的時候也要問清楚

在使用公鑰進行加密時,會發現每次加密出的結果都不一樣,但使用私鑰加密時,每次的結果都一樣,網上查了一圈,說是因為填充方式的原因。

官方文檔說明:

那麼為什麼一定要使用私鑰做簽名,公鑰做加密,而不是公鑰做簽名,私鑰做加密呢?
舉個栗子:

E. 知道hash加密的代碼,怎麼識別其原本信息

hash值是不能識別原本信息的,給出的hash值是用來識別唯一性的。因為BT是從很多源下載,只有是同一個文件下載下來的片段才能拼成完整的文件,怎麼判斷下載的是同一個文件,就是用這個hash值。

F. 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));

G. 開發中常見的加密方式及應用

開發中常見的加密方式及應用

一、base64

簡述:Base64是網路上最常見的用於傳輸8Bit 位元組碼 的編碼方式之一,Base64就是一種基於64個可列印字元來表示二進制數據的方法。所有的數據都能被編碼為並只用65個字元就能表示的文本文件。( 65字元:A~Z a~z 0~9 + / = )編碼後的數據~=編碼前數據的4/3,會大1/3左右(圖片轉化為base64格式會比原圖大一些)。

應用:Base64編碼是從二進制到字元的過程,可用於在 HTTP 環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就採用了Base64來將一個較長的唯一 標識符 (一般為128-bit的UUID)編碼為一個字元串,用作HTTP 表單 和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制 數據編碼 為適合放在URL(包括隱藏 表單域 )中的形式。此時,採用Base64編碼具有不可讀性,需要解碼後才能閱讀。

命令行進行Base64編碼和解碼

編碼:base64 123.png -o 123.txt

解碼:base64 123.txt -o test.png -D Base64編碼的原理

原理:

1)將所有字元轉化為ASCII碼;

2)將ASCII碼轉化為8位二進制;

3)將二進制3個歸成一組(不足3個在後邊補0)共24位,再拆分成4組,每組6位;

4)統一在6位二進制前補兩個0湊足8位;

5)將補0後的二進制轉為十進制;

6)從Base64編碼表獲取十進制對應的Base64編碼;

Base64編碼的說明:

a.轉換的時候,將三個byte的數據,先後放入一個24bit的緩沖區中,先來的byte占高位。

b.數據不足3byte的話,於緩沖區中剩下的bit用0補足。然後,每次取出6個bit,按照其值選擇查表選擇對應的字元作為編碼後的輸出。

c.不斷進行,直到全部輸入數據轉換完成。

d.如果最後剩下兩個輸入數據,在編碼結果後加1個「=」;

e.如果最後剩下一個輸入數據,編碼結果後加2個「=」;

f.如果沒有剩下任何數據,就什麼都不要加,這樣才可以保證資料還原的正確性。

二、HASH加密/單向散列函數

簡述:Hash演算法特別的地方在於它是一種單向演算法,用戶可以通過Hash演算法對目標信息生成一段特定長度(32個字元)的唯一的Hash值,卻不能通過這個Hash值重新獲得目標信息。對用相同數據,加密之後的密文相同。 常見的Hash演算法有MD5和SHA。由於加密結果固定,所以基本上原始的哈希加密已經不再安全,於是衍生出了加鹽的方式。加鹽:先對原始數據拼接固定的字元串再進行MD5加密。

特點:

1) 加密 後密文的長度是定長(32個字元的密文)的

2)如果明文不一樣,那麼散列後的結果一定不一樣

3)如果明文一樣,那麼加密後的密文一定一樣(對相同數據加密,加密後的密文一樣)

4)所有的加密演算法是公開的

5)不可以逆推反算(不能根據密文推算出明文),但是可以暴力 破解 ,碰撞監測

原理:MD5消息摘要演算法,屬Hash演算法一類。MD5演算法對輸入任意長度的消息進行運行,產生一個128位的消息摘要。

1)數據填充

對消息進行數據填充,使消息的長度對512取模得448,設消息長度為X,即滿足X mod 512=448。根據此公式得出需要填充的數據長度。

填充方法:在消息後面進行填充,填充第一位為1,其餘為0。

2)添加信息長度

在第一步結果之後再填充上原消息的長度,可用來進行的存儲長度為64位。如果消息長度大於264,則只使用其低64位的值,即(消息長度 對264取模)。

在此步驟進行完畢後,最終消息長度就是512的整數倍。

3)數據處理

准備需要用到的數據:

4個常數:A = 0x67452301, B = 0x0EFCDAB89, C = 0x98BADCFE, D = 0x10325476;

4個函數: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));

把消息分以512位為一分組進行處理,每一個分組進行4輪變換,以上面所說4個常數為起始變數進行計算,重新輸出4個變數,以這4個變數再進行下一分組的運算,如果已經是最後一個分組,則這4個變數為最後的結果,即MD5值。

三、對稱加密

經典演算法:

1)DES數據加密標准

DES演算法的入口參數有三個:Key、Data、Mode。其中Key為8個位元組共64位,是DES演算法的工作密鑰;Data也為8個位元組64位,是要被加密或被解密的數據;Mode為DES的工作方式,有兩種:加密或解密。

DES演算法是這樣工作的:如Mode為加密,則用Key去把數據Data進行加密, 生成Data的密碼形式(64位)作為DES的輸出結果;如Mode為解密,則用Key去把密碼形式的數據Data解密,還原為Data的明碼形式(64位)作為DES的輸出結果。在通信網路的兩端,雙方約定一致的Key,在通信的源點用Key對核心數據進行DES加密,然後以密碼形式在公共通信網(如電話網)中傳輸到通信網路的終點,數據到達目的地後,用同樣的Key對密碼數據進行解密,便再現了明碼形式的核心數據。這樣,便保證了核心數據(如PIN、MAC等)在公共通信網中傳輸的安全性和可靠性。

2)3DES使用3個密鑰,對消息進行(密鑰1·加密)+(密鑰2·解密)+(密鑰3·加密)

3)AES高級加密標准

如圖,加密/解密使用相同的密碼,並且是可逆的

四、非對稱加密

特點:

1)使用公鑰加密,使用私鑰解密

2)公鑰是公開的,私鑰保密

3)加密處理安全,但是性能極差

經典演算法RSA:

1)RSA原理

(1)求N,准備兩個質數p和q,N = p x q

(2)求L,L是p-1和q-1的最小公倍數。L = lcm(p-1,q-1)

(3)求E,E和L的最大公約數為1(E和L互質)

(4)求D,E x D mode L = 1

五、數字簽名

原理以及應用場景:

1)數字簽名的應用場景

需要嚴格驗證發送方身份信息情況

2)數字簽名原理

(1)客戶端處理

對"消息"進行HASH得到"消息摘要"

發送方使用自己的私鑰對"消息摘要"加密(數字簽名)

把數字簽名附著在"報文"的末尾一起發送給接收方

(2)服務端處理

對"消息" HASH得到"報文摘要"

使用公鑰對"數字簽名"解密

對結果進行匹配

六、數字證書

簡單說明:

證書和駕照很相似,裡面記有姓名、組織、地址等個人信息,以及屬於此人的公鑰,並有認證機構施加數字簽名,只要看到公鑰證書,我們就可以知道認證機構認證該公鑰的確屬於此人。

數字證書的內容:

1)公鑰

2)認證機構的數字簽名

證書的生成步驟:

1)生成私鑰openssl genrsa -out private.pem 1024

2)創建證書請求openssl req -new -key private.pem -out rsacert.csr

3)生成證書並簽名,有效期10年openssl x509 -req -days 3650 -in rsacert.csr -signkey private.pem -out rsacert.crt

4)將PEM格式文件轉換成DER格式openssl x509 -outform der -in rsacert.crt -out rsacert.der

5)導出P12文件openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt

iOS開發中的注意點:

1)在iOS開發中,不能直接使用PEM格式的證書,因為其內部進行了Base64編碼,應該使用的是DER的證書,是二進制格式的;

2)OpenSSL默認生成的都是PEM格式的證書。

七、https

HTTPS和HTTP的區別:

超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站伺服器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站伺服器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。

為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證伺服器的身份,並為瀏覽器和伺服器之間的通信加密。

HTTPS和HTTP的區別主要為以下四點:

1)https協議需要到ca申請證書,一般免費證書很少,需要交費。

2)http是 超文本傳輸協議 ,信息是明文傳輸,https則是具有 安全性 的 ssl 加密傳輸協議。

3)http和https使用的是完全不同的連接方式,用的埠也不一樣,前者是80,後者是443。

4)http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的 網路協議 ,比http協議安全。

5)SSL:Secure Sockets Layer安全套接字層;用數據加密(Encryption)技術,可確保數據在網路上傳輸過程中不會被截取及竊聽。目前一般通用之規格為40 bit之安全標准,美國則已推出128 bit之更高安全標准,但限制出境。只要3.0版本以上之I.E.或Netscape 瀏覽器 即可支持SSL。目前版本為3.0。SSL協議位於TCP/IP協議與各種應用層協議之間,為數據通訊提供安全支持。SSL協議可分為兩層:SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密密鑰等。

H. 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提取所有文件信息,還有一種情況就是上一次你非法關機,那麼這個時候就是要進行排錯校驗了。

I. 電子版論文hash值怎麼填

電子版論文hash值直接下載一個電子論文SHA-1值生成器,加上論文就可以生成SHA-1值。

hash值通過一定的哈希演算法(典型的有MD5,SHA-1等),將一段較長的數據映射為較短小的數據,這段小數據就是大數據的哈希值。他有這樣一個特點,他是唯一的,一旦大數據發生了變化,哪怕是一個微小的變化,哈希值也會發生變化。

哈希值的作用:

哈希值即HASH值是通過對文件內容進行加密運算得到的一組二進制值,主要用途是用於文件校驗或簽名。正是因為這樣的特點常常用來判斷兩個文件是否相同。

相關知識:

「論文pdf版」是指以PDF為基本呈現形式的論文。「PDF是Portable Document Format的簡稱,意為「可攜帶文檔格式」,是由Adobe Systems用於與應用程序、操作系統、硬體無關的方式進行文件交換所發展出的文件格式。

PDF文件以PostScript語言圖象模型為基礎,無論在哪種列印機上都可保證精確的顏色和准確的列印效果,即PDF會忠實地再現原稿的每一個字元、顏色以及圖象。

以上內容參考:網路-哈希值

熱點內容
sql腳本加斜杠 發布:2025-05-20 15:40:21 瀏覽:620
搭建伺服器創建小程序 發布:2025-05-20 15:34:40 瀏覽:623
精通腳本 發布:2025-05-20 14:42:56 瀏覽:385
東方財富經典版如何更改密碼 發布:2025-05-20 14:42:43 瀏覽:944
砸口紅解壓 發布:2025-05-20 14:41:02 瀏覽:511
配置sp失敗怎麼辦 發布:2025-05-20 14:35:08 瀏覽:179
java學到什麼程度 發布:2025-05-20 14:31:54 瀏覽:480
壓縮誤差分析 發布:2025-05-20 14:27:53 瀏覽:98
每秒上億次訪問伺服器怎麼處理 發布:2025-05-20 14:10:07 瀏覽:315
按鍵精靈資料庫操作 發布:2025-05-20 14:08:33 瀏覽:593