『壹』 哈希值是什麼意思
哈希值一般指哈希函數。
哈希函數指將哈希表中元素的關鍵鍵值映射為元素存儲位置的函數。
一般的線性表,樹中,記錄在結構中的相對位置是隨機的,即和記錄的關鍵字之間不存在確定的關系,因此,在結構中查找記錄時需進行一系列和關鍵字的比較。這一類查找方法建立在「比較「的基礎上,查找的效率依賴於查找過程中所進行的比較次數。
理想的情況是能直接找到需要的記錄,因此必須在記錄的存儲位置和它的關鍵字之間建立一個確定的對應關系f,使每個關鍵字和結構中一個唯一的存儲位置相對應。
哈希值概念簡單普及:
1、哈希值其實就是一段數據,只不過這個數據有特殊的含義,它是某個文件或者某個字元串的DNA,或者身份證。
2、哈希演算法(典型的有MD5,SHA-1等),將一段較長的數據映射為較短小的數據,這段小數據就是大數據的哈希值。
它有這樣一個特點,他是唯一的,一旦數據發生了變化,哪怕是一個微小的變化,它的哈希值也會發生變化。另外一方面,既然是DNA,那就保證了沒有兩個數據的哈希值是完全相同的。
3、它常常用來判斷兩個文件是否相同。比如,從網路上下載某個文件,只要把這個文件原來的哈希值同下載後得到的文件的哈希值進行對比,如果相同,則表示兩個文件完全一致,下載過程沒有損壞文件。
而如果不一致,則表明下載得到的文件跟原來的文件不同,文件在下載過程中受到了損壞。
『貳』 怎麼用哈希函數給資料庫中的密碼加密
可以使用 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; 聲明一個字元串變數以存放源數據,並聲明兩個位元組數組(未定義大小)分別存放源位元組和得出的哈希值。 s
『叄』 hash演算法是什麼
Hash,就是把任意長度的輸入(又叫做預映射,pre-image),通過散列演算法,變換成固定長度的輸出,該輸出就是散列值。這種轉換是一種壓縮映射,也就是,散列值的空間通常遠小於輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數。
使用哈希查找有兩個步驟:
1、使用哈希函數將被查找的鍵轉換為數組的索引。在理想的情況下,不同的鍵會被轉換為不同的索引值,但是在有些情況下我們需要處理多個鍵被哈希到同一個索引值的情況。所以哈希查找的第二個步驟就是處理沖突。
2、處理哈希碰撞沖突。有很多處理哈希碰撞沖突的方法,本文後面會介紹拉鏈法和線性探測法。
『肆』 什麼是哈希演算法,公式是什麼
哈希演算法將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字母,隨後的哈希都將產生不同的值。要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的,所以數據的哈希值可以檢驗數據的完整性。哈希表是根據設定的哈希函數H(key)和處理沖突方法將一組關鍵字映象到一個有限的地址區間上,並以關鍵字在地址區間中的象作為記錄在表中的存儲位置,這種表稱為哈希表或散列,所得存儲位置稱為哈希地址或散列地址。作為線性數據結構與表格和隊列等相比,哈希表無疑是查找速度比較快的一種。通過將單向數學函數(有時稱為「哈希演算法」)應用到任意數量的數據所得到的固定大小的結果。如果輸入數據中有變化,則哈希也會發生變化。哈希可用於許多操作,包括身份驗證和數字簽名。也稱為「消息摘要」。 小紅和小明可按下面的方式使用哈希函數以確保數據完整性: 如果小紅對小明編寫一條消息並創建該消息的哈希,則小明可以在稍後散列該消息並將他的哈希與原始哈希進行比較。如果兩個哈希值相同,則該消息沒有被更改;但是,如果值不相同,則該消息在小紅編寫它之後已被更改。為了使此系統運行,小紅必須對除小明外的所有人保密原始的哈希值。
『伍』 哈希值是什麼啊,hashcode又是怎麼用的
hashcode是一種方法,該方法返回的值就是哈希值。相當於公用的數據大小的演算法
『陸』 哈希值計算方式的計算過程是怎樣理解的 如題
哈希演算法是將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值稱為哈希值.哈希值是一段數據唯一且極其緊湊的數值表示形式.如果散列一段明文而且哪怕只更改該段落的一個字母,隨後的哈希都將產生不同的值.要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的.----------------------------------------------------------------------------------轉自佰度網路.
『柒』 c#之如何計算哈希值字元串
因為所有的哈希函數都接收類型為 Byte() 的輸入,因此可能需要將初始數據轉換成一個位元組數組才能夠為它產生哈希值。欲為一個字元串值建立一個哈希值,請依下列步驟進行:1、使用Using語句導入System、System.Security、System.Security.Cryptographic與System.Text命名空間,這樣一來,您才不需要於程序代碼中編寫一長串的完整名稱:using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;2、聲明一個字元串變數來持有您的初始數據,並聲明兩個位元組數組(未定義大小)來持有初始位元組與所產生出的哈希值:string sSourceData;
byte[] tmpSource;
byte[] tmpHash;3、使用 GetBytes() 方法(它是System.Text.ASCIIEncoding類的一部分)將您的初始字元串轉換至一個位元組數組中:sSourceData = "MySourceData";// 根據初始數據來建立一個位元組數組
tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData);4、通過調用MD5CryptoServiceProvider類的實例的ComputeHash方法來為您的初始數據計算出MD5哈希值。請注意,欲計算出另外一個哈希值,您必須建立該類的另外一個實例。// 根據初始數據計算出哈希值tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource);5、tmpHash位元組數組現在會獲取您初始數據的哈希值(128位值=16位元組)。將此顯示或儲存成一個十六進制字元串通常會非常有用,下列程序代碼即是進行此項處理:lblHashResult.Text = sSourceData + "\n" + ByteArrayToString(tmpHash) + "\n";private string ByteArrayToString(byte[] arrInput){StringBuilder sOutput = new StringBuilder(arrInput.Length);for (int i = 0; i < arrInput.Length; i++)
return sOutput.ToString();
}6、通過上述程序代碼,您便能夠為初始數據產生出哈希值並以一個十六進制字元串來表示。接下來,我們要繼續說明如何比較兩個哈希值。為初始數據建立哈希值的目的之一,就是要提供一種方式來檢查數據是否被更改過,或是不通過實際的值來比較兩個值。不論是哪一種情況,您都需要比較兩個哈希值。然而,如果兩個哈希值皆已儲存成十六進制字元串,則比較哈希值的操作將會更加簡易。當然,也有可能兩個哈希值都是以位元組數組的形式存在。後續步驟的程序代碼將延續先前步驟的程序代碼,以便示範如何比較兩個位元組數組。7、請在建立一個十六進制字元串的地方,緊接著根據新的初始數據建立一個新的哈希值:sSourceData = "NotMySourceData";
tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData);byte[] tmpNewHash;
bool bEqual = false;tmpNewHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource);8、比較兩個位元組數組最直接了當的方式就是通過循環依序處理數組,以便一一比較兩數組中的每一個元素。如果有任何元素不相同,或是兩數組的大小不相同,則表示兩值並不相等: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){lblHashResult.Text += "這兩個哈希值是相同的";}else{lblHashResult.Text += "這兩個哈希值並不相同";
}9、保存與運行您的項目,以便查看根據第一個哈希值所建立的十六進制字元串,並確認新的哈希值是否與初始的相同。
『捌』 哈希值計算方式的計算過程是怎樣理解的請計算機高手解答。
哈希演算法是將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值稱為哈希值。哈希值是一段數據唯一且極其緊湊的數值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字母,隨後的哈希都將產生不同的值。要找到散列為同一個值的兩個不同的輸入,在計算上是不可能的。
----------------------------------------------------------------------------------轉自佰度網路。
『玖』 請教一個哈希值的取法
hashCode的設計主要是為了組裝散列桶時重復的越少效率越高。
因為電話號碼不重復,所有你的hashCode=區號+電話號就可以。
不用再加其他的了。
但是注意通常,從寫hashcode後,根據程序業務通常需要重寫equals方法。
『拾』 哈希值怎麼用
因為hash值是不可逆的演算法的出來的,是驗證文件唯一性的方法。
因為不可逆,所以根據hash值得不到文件本來的信息,所以你也就不能根據它得到原始文件的任何信息咯,當然這個文件大小是你已經提供的資料了。
但是可以提醒一下,你可以把hash值和文件大小作為關鍵字在萬能的度娘上試一試,看看有沒有什麼結果哦