HASH雜湊遊戲原始碼丨HASH雜湊遊戲系統開發丨HASH雜湊遊戲開發成品原始碼部署

Tg_StPv888發表於2023-02-15

  HASH函式(計算機演算法領域)

  若結構中存在和關鍵字K相等的記錄,則必定在f(K)的儲存位置上。由此,不需比較便可直接取得所查記錄。稱這個對應關係f為雜湊函式(Hash function),按這個思想建立的表為雜湊表。

  對不同的關鍵字可能得到同一雜湊地址,即key1≠key2,而f(key1)=f(key2),這種現象稱碰撞。具有相同函式值的關鍵字對該雜湊函式來說稱做同義詞。綜上所述,根據雜湊函式H(key)和處理衝突的方法將一組關鍵字映象到一個有限的連續的地址集(區間)上,並以關鍵字在地址集中的"象"作為記錄在表中的儲存位置,I8O系統2857開發8624遊戲這種表便稱為雜湊表,這一映象過程稱為雜湊造表或雜湊,所得的儲存位置稱雜湊地址。

 

 什麼是區塊鏈?

  區塊鏈是一個記錄列表,通常稱為記賬本,它利用密碼學元素以開放、防篡改的方式儲存交易。每個“塊”代表代表一個新的交易分組,幷包含三個關鍵元件:

  資料:每個區塊中儲存的資訊取決於區塊鏈的型別。例如,許多加密貨幣(如比特幣)儲存交易詳細資訊,如傳送方、接收方和金額。

  雜湊:一個塊的雜湊是一個唯一的字串,用於識別和區分它與其他塊。

  前一個塊的雜湊:後續塊也儲存前一個塊的雜湊,建立所謂的“區塊鏈”。

  區塊鏈在防止篡改和提供對新增到鏈中的塊的公開驗證方面是獨一無二的。如果一個塊被修改,它的雜湊值會發生變化,並且所有後續塊不再指向正確的雜湊值,從而使它們失效。不法分子需要遍歷所有以下區塊並重新計算其雜湊值以修改區塊鏈。

  但是,區塊鏈使用稱為工作量證明的東西來防止這種情況發生。工作量證明使用一種分散式共識形式在將區塊新增到鏈上之前對其進行驗證。這減慢了塊驗證過程(通常每個新增到鏈中的塊需要幾秒鐘到幾分鐘的時間),使惡意行為者無法更改塊並重新驗證鏈中的後續塊。

一.Hash建構函式的方法

1.直接定址法:

直接定址法是以資料元素關鍵字k本身或它的線性函式作為它的雜湊地址,即:H(k)=k或H(k)=a×k+b;(其中a,b為常數)

2.數字分析法:

假設關鍵字集合中的每個關鍵字都是由s位數字組成(u1,u2,…,us),分析關鍵字集中的全體,並從中提取分佈均勻的若干位或它們的組合作為地址。

數字分析法是取資料元素關鍵字中某些取值較均勻的數字位作為雜湊地址的方法。即當關鍵字的位數很多時,可以透過對關鍵字的各位進行分析,丟掉分佈不均勻的位,作為雜湊值。它只適合於所有關鍵字值已知的情況。透過分析分佈情況把關鍵字取值區間轉化為一個較小的關鍵字取值區間。

3.摺疊法:

將關鍵字分割成若干部分,然後取它們的疊加和為雜湊地址。兩種疊加處理的方法:移位疊加:將分割後的幾部分低位對齊相加;邊界疊加:從一端沿分割界來回摺疊,然後對齊相加。

所謂摺疊法是將關鍵字分割成位數相同的幾部分(最後一部分的位數可以不同),然後取這幾部分的疊加和(捨去進位),這方法稱為摺疊法。這種方法適用於關鍵字位數較多,而且關鍵字中每一位上數字分佈大致均勻的情況。

摺疊法中數位摺疊又分為移位疊加和邊界疊加兩種方法,移位疊加是將分割後是每一部分的最低位對齊,然後相加;邊界疊加是從一端向另一端沿分割界來回摺疊,然後對齊相加。

二、 常見解決雜湊衝突的方法

  1.線性探查法

  當我們往雜湊表中插入資料時,I8O系統2857開發8624遊戲如果某個資料經過雜湊函式雜湊之後,儲存位置已經被佔用了,我們就從當前位置開始,依次往後查詢,看是否有空閒位置,直到找到為止。

  2.雙重雜湊方法

  所謂雙重雜湊,意思就是不僅要使用一個雜湊函式,而是使用一組雜湊函式hash1(key),hash2(key),hash3(key)...先用第一個雜湊函式,如果計算得到的儲存位置已經被佔用,再用第二個雜湊函式,依次類推,直到找到空閒的儲存位置。

  3.連結串列法

  連結串列法是一種更加常用的雜湊衝突解決辦法,相比開放定址法,它要簡單很多。在雜湊表中,每個位置對應一條連結串列,所有雜湊值相同的元素都放到相同位置對應的連結串列中。

  若對於關鍵字集合中的任一個關鍵字,經雜湊函式映象到地址集合中任何一個地址的機率是相等的,則稱此類雜湊函式為均勻雜湊函式(Uniform Hash function),這就是使關鍵字經過雜湊函式得到一個"隨機的地址",從而減少衝突。

  雜湊表(Hash table,也叫雜湊表),是根據關鍵碼值(Key value)而直接進行訪問的資料結構。也就是說,它透過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。

  特點:如果兩個雜湊值是不相同的(根據同一函式),那麼這兩個雜湊值的原始輸入一定是不相同的;如果兩個雜湊值相同,兩個輸入值很可能(極大機率)是相同的,但也可能不同,這種情況稱為“雜湊碰撞”。

  抗篡改能力:對於一個資料塊,哪怕只改動其一個位元位,其Hash值的改動也會非常大。它是一種單向函式是“非對稱”的,即它是一個從明文到密文的不可逆的對映,只有加密過程,沒有解密過程

  常用HASH函式

  ·直接取餘法:f(x):=x mod maxM;maxM一般是不太接近2^t的一個質數。

  ·乘法取整法:f(x):=trunc((x/maxX)*maxlongit)mod maxM,主要用於實數。

  ·平方取中法:f(x):=(x*x div 1000)mod 1000000);平方後取中間的,每位包含資訊比較多。

  public class Main{

  public static void main(String[]args)throws Exception{

  //建立一個MessageDigest例項:

  MessageDigest md=MessageDigest.getInstance("SHA-1");

  //反覆呼叫update輸入資料:

  md.update("Hello".getBytes("UTF-8"));

  md.update("World".getBytes("UTF-8"));

  byte[]result=md.digest();//20 bytes:db8ac1c259eb89d4a131b253bacfca5f319d54f2

  System.out.println(new BigInteger(1,result).toString(16));


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2935374/,如需轉載,請註明出處,否則將追究法律責任。

相關文章