ITPub博客

首页 > 区块链 > 区块链 > HASH哈希游戏源码丨HASH哈希游戏系统开发丨HASH哈希游戏开发成品源码部署

HASH哈希游戏源码丨HASH哈希游戏系统开发丨HASH哈希游戏开发成品源码部署

原创 区块链 作者:Tg_StPv888 时间:2023-02-15 10:17:29 0 删除 编辑

  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博客 ” ,链接:https://blog.itpub.net/70016646/viewspace-2935374/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专业区块项目开发团队:18028578624微電

注册时间:2022-04-13

  • 博文量
    158
  • 访问量
    95693