精华内容
下载资源
问答
  • 哈希值

    2019-11-29 21:04:42
    哈希值 哈希值简介 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值 如何获取哈希值 Object类中的public int hashCode():返回对象的哈希码值 哈希值的特点 同一个对象多...

    哈希值

    • 哈希值简介

      • 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
    • 如何获取哈希值

      • Object类中的public int hashCode():返回对象的哈希码值
    • 哈希值的特点

      • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
      • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
    • 获取哈希值的代码

      • 学生类
      public class Student {
          private String name;
          private int age;
      
          public Student() {
          }
      
          public Student(String name, int age) {
              this.name = name;
              this.age = age;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public int getAge() {
              return age;
          }
      
          public void setAge(int age) {
              this.age = age;
          }
      
          @Override
          public int hashCode() {
              return 0;
          }
      }
      
      • 测试类
      public class HashDemo {
          public static void main(String[] args) {
              //创建学生对象
              Student s1 = new Student("林青霞",30);
      
              //同一个对象多次调用hashCode()方法返回的哈希值是相同的
              System.out.println(s1.hashCode()); //1060830840
              System.out.println(s1.hashCode()); //1060830840
              System.out.println("--------");
      
              Student s2 = new Student("林青霞",30);
      
              //默认情况下,不同对象的哈希值是不相同的
              //通过方法重写,可以实现不同对象的哈希值是相同的
              System.out.println(s2.hashCode()); //2137211482
              System.out.println("--------");
      
              System.out.println("hello".hashCode()); //99162322
              System.out.println("world".hashCode()); //113318802
              System.out.println("java".hashCode()); //3254818
      
              System.out.println("world".hashCode()); //113318802
              System.out.println("--------");
      
              System.out.println("重地".hashCode()); //1179395
              System.out.println("通话".hashCode()); //1179395
          }
      }
      
    展开全文
  • 获取哈希值

    2018-01-29 16:55:46
    HashHash 获取哈希值获取哈希值获取哈希值获取哈希值获取哈希值
  • ## 概述任何对象,都有一个哈希值,这个哈希值是对象的一个整数数字表示. 对象的字符串表示是toString()方法.## 如何获取对象的哈希值每一个对象都有一个方法,hashCode(),这个方法定义在了Object类中,所以每个对象都...

    ## 概述

    任何对象,都有一个哈希值,这个哈希值是对象的一个整数数字表示. 对象的字符串表示是toString()方法.

    ## 如何获取对象的哈希值

    每一个对象都有一个方法,hashCode(),这个方法定义在了Object类中,所以每个对象都具有.

    在p中存储了真正的地址,但是在java 中看不了,可以 看toString()方法,它是把哈希值转成十六进制了 .

    ~~~

    Person p = new Person();

    System.out.println(p.hashCode());

    System.out.println(p);

    ~~~

    ```

    20671747 //将这个数值转换为十六进制,就是下面内存地址13b6d03

    com.like_so.Person@13b6d03 //地址地址就是哈希值的十六进制,以前说的地址值,实际上根本不是地址值,实际上是哈希值的十六进制表示. 在java无法看真正的内存地址值

    ```

    ## 哈希值的由来

    哈希值是由真正的地址值得来的,通过一种散列算法(哈希算法).哈希算法是不可逆的.

    ## String的哈希值

    过源码可以知道,String重写了hashCode()方法,哈希值不再童年各国地址值计算.String类型的hashcode只跟内容有关,所以只要字符串的内容相同,hashcode的值就是一致的.

    只要字符串的内容一样,哈希值肯定一样.

    字符串的哈希值一样,如果两个那么内容可能不一样.

    ## 哈希表结构

    数组结构+连表结构的组合,查询快,增删快.

    ## 哈希表判断元素是否重复的原理

    1. 先判断新元素的哈希值和旧元素的哈希值是否相同.如果都不相同,直接判断不重复,添加.

    2. 如果重复,则调用equals()进行比较,如果返回的是true,判定重复元素,不添加.如果是false,判定不重复,添加.

    ![](https://box.kancloud.cn/96f3c69b08949dc54e18422f973e84bc_1178x537.png)

    ~~~

    Set s = new HashSet<>();

    System.out.println("通话".hashCode());

    System.out.println("重地".hashCode()); //这两个的哈希值是相同的

    s.add("php");

    s.add("通话");

    s.add("重地");

    System.out.println("abc".hashCode());

    System.out.println("acD".hashCode());

    s.add("abc");

    s.add("abc");

    s.add("acD");

    System.out.println(s.size());

    ~~~

    结果

    ```

    1179395

    1179395

    96354

    96354

    5

    [通话, 重地, abc, acD, php]

    ```

    只有哈希值相同,equals()返回true,才判定重复.

    展开全文
  • 二个代码一个是获取文件哈希值的,另外一个是获取torrent文件磁力链接的哈希值
  • 哈希值MAC值简介

    2021-03-16 10:46:10
    说到哈希值,都知道哈希值是通过哈希函数计算得出的,有时看了一堆介绍哈希值、哈希表、哈希函数的资料,却对哈希值还是一知半解。那么要理解哈希值,就要先明白哈希值的作用是什么,为什么需要哈希值哈希值...

    一、哈希值

            说到哈希值,都知道哈希值是通过哈希函数计算得出的,有时看了一堆介绍哈希值、哈希表、哈希函数的资料,却对哈希值还是一知半解。那么要理解哈希值,就要先明白哈希值的作用是什么,为什么需要哈希值。

            哈希值作用有二,一数据压缩,二数据完整性校验。(个人理解)

            数据压缩,是为了传输方便以及保证数据安全性。像原数据50M,计算出的哈希值只有1K,传1K当然会方便很多。数据安全性是指通过哈希值无法反推出原数据。哈希函数是单向的。这样就保证了其他人虽然获取到哈希值但无法知道原数据是什么,保证了原数据的安全性。
            压缩后的数据并不能“解压缩”,值x通过哈希函数f(x)计算得到哈希值y后,y不能反推得到x。因为为了压缩数据大小,在x计算过程中必定有数据损耗,如某一步骤计算出来的数据会向右偏移4位,低的4位就被舍弃了,如此一来就无法通过计算出的结果反推出原数据了。

            完整性校验,就是校验数据完整性,有没有被别人篡改。举例来讲,就是A要给B发一个重要消息“今晚8点来我家找我”,为了防止中间被别人篡改时间或地点,A会发给B这个消息本身及这个消息的哈希值,B拿到信息后,将信息计算哈希,与A发来的哈希值进行比较,若相同则说明消息未被篡改,若哈希值不同,说明消息被篡改了。

           了解了哈希值两个作用后,你就会明白哈希函数的重要性。并不是随便写一个函数就可以把它叫做哈希函数。它需要有数据压缩的功能,因此它会有一个取值范围。完整性校验就要求哈希函数需要让x的哈希值尽量均匀、随机的散列在这个取值范围内。若不能均匀、随机的散列在取值范围内,会被找出规律,容易找到两个哈希值相同的数据,从而篡改原数据。因此哈希值又被称为散列值。哈希值的安全性就在于哈希函数的复杂度,越复杂越不容易被人破解。

            最后,一句话总结一下,哈希值是通过哈希函数映射到哈希表内。
            哈希值:不能通过哈希值得到原数据。
            哈希函数:需要尽量均匀随机的将数据映射到哈希表。
            哈希表,其实就是一个取值范围。

    二、MAC(消息身份验证代码 )
            MAC:Message Authentication Code
            MAC实际上就是带密钥的hash函数。这个秘钥使得MAC值比哈希值多出一个功能:身份验证。
            哈希值可以保证数据的完整性,但你无法确定这个哈希值是不是你预期的人发给你的。你只知道你收到一条消息+它的哈希值,验证通过,但无法保证这个消息和哈希值有没有整体被替换。
            MAC值就可以做身份验证。A和B之间有一共享秘钥,这个秘钥是其他人不知道的,那么这个秘钥参与哈希函数计算过程,俗称加盐,就可以保证我收到这个消息确定是由的A发来的,因为参与哈希计算的秘钥只有A和B知道,其它人无法伪造这条消息的哈希值。
            这就是MAC,消息身份认证码。有身份验证及完整性验证两功能。

    展开全文
  • """区块包括区块头和区块体两..."""简化后的区块包括父区块哈希值、数据、时间戳、哈希值这四个字段,区块的哈希值由父区块哈希值、数据、时间戳、3个字段拼接通过 哈希算法计算而成""" import hashlib from datetim.
    """区块包括区块头和区块体两个部分。区块头由版本、父区块哈希值、数据、Merkle根、时间戳、目标难度、
    #Nonce值组成;区块体实际上可以包含任何内容,在比特币中包含交易输入数量、交易输出数量
    和长度不等的交易记录等信息。在以太坊中的区块体中除了交易数据还包含中智能合约"""
    
    #简单版区块链
    """简化后的区块包括父区块哈希值、数据、时间戳、哈希值这四个字段,区块的哈希值由父区块哈希值、数据、时间戳、3个字段拼接通过
    哈希算法计算而成"""
    
    import hashlib
    from datetime import datetime
    
    class Block:
        '''区块结构
                   prev_hash:   父区块哈希值
                   data:        区块内容
                   timestamp:   区块创建时间
                   hash:        区块哈希值
        '''
        def __init__(self,data,prev_hash):
            #将传入的父区块哈希值和数据保存到类变量中
            self.prev_hash = prev_hash
            self.data = data
            #获取当前时间
            self.timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    
            #计算区块的哈希值
    
    
            message = hashlib.sha256()
            message.update(str(self.prev_hash).encode('utf-8'))
            message.update(str(self.data).encode('utf-8'))
            message.update(str(self.timestamp).encode('utf-8'))
            self.hash = message.hexdigest()
    '''区块链是由区块组成的链条,定义了区块的结构后还需要定义一个区块链的结构。将各个区块通过哈希值前后依次相连,然后
    将这些区块都放到一个数组中,初始化时列表为空,新的区块依次放到这个列表中,再定义一个函数来是实现向这个列表中
    添加区块的功能,从而定义了这个区块链的结构'''
    class BlockChain:
        """区块链结构体
        blocks: 包含的区块列表"""
        def __init__(self):
            self.blocks = []
        def add_block(self,block):
            '''添加区块'''
            self.blocks.append(block)
    
    '''以上完成了最简单的区块链结构,下面在此基础上一步步对其完善直至实现一个真正的区块链系统。
    实现区块链原型'''
    '''(1)先创建第一个区块,或者叫作创世区块'''
    #生成创世区块     创世区块是第一个区块,无父区块哈希;
    genesis_block = Block(data='创世区块',prev_hash="")
    '''(2)再创建2个区块,prev_hash 分别为父区块哈希值'''
    
    '''创建两个区块,数据是关于张三的转账记录,pre_hash依次是前一个区块的哈希值'''
    new_block = Block(data="张三转给李四1比特币", prev_hash=genesis_block.hash)
    new_block2 = Block(data="张三转给王五2个比特币",prev_hash = new_block.hash)
    
    '''(3)新创建一个区块链,并将上面的区块添加到区块链中'''
    #新建一个区块链
    blockchain =  BlockChain()
    #将上面的几个区块添加到区块链中
    blockchain.add_block(genesis_block)
    blockchain.add_block(new_block)
    
    blockchain.add_block(new_block2)
    
    '''最后打印输出当前区块链的信息,可以看到这个区块链包含了三个区块'''
    #打印区块链
    print("区块链包含区块个数:%d\n" %len(blockchain.blocks))
    for block in blockchain.blocks:
        print("父区块区块哈希: %s" %block.prev_hash)
        print('区块内容:%s' %block.data)
        print('区块哈希:%s' %block.hash)
        print('\n')

    以上代码源于《自学区块链》  范凌杰 机械工业出版社

    展开全文
  • 哈希值计算

    2015-12-18 21:02:15
    一个完全免费而且体积小巧的哈希值计算程序,支持字符串和文件的哈希值计算,使用的时候只需把你需要计算哈希值的文件拖放到程序窗口中即可。
  • 哈希值与哈希表

    2020-06-21 21:44:02
    哈希值 哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得的地址,不是数据实际存储的物理地址) 在Object类中有一个方法,可以获取对象的哈希值 int hashCode() ...
  • 哈希值详解

    千次阅读 2019-11-27 22:33:41
    哈希值 哈希值概述 是Jdk根据对象的地址/String/数字算出来一串数字(int) 如何获取对象的哈希值? hashCode()是Object类的方法,所以说Java的对象都可以调用这个hashCode方法返回哈希值. 哈希值特点 如果...
  • 哈希值 & 哈希表

    2020-06-12 16:51:12
    哈希值 是一个十进制的整数,由系统随机给出,就是是对象的地址值(十六进制)也称逻辑地址,但非对象的物理地址。 获取方法 在Object类有一个方法,可以获取对象的哈希值 public native int hashCode():返回该...
  • 这里我们就不得不了解一下哈希值了。哈希值是一串固定长度的二进制数值,它是哈希算法(Hash算法)计算的出来的。哈希算法可以将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值哈希...
  • 45哈希值校验值计算器是一款可以支持计算字符串的哈希值。 支持: 计算字符串的哈希值校验值,计算文件的哈希值校验值, 支持MD5,CRC32,SHA1(160),SHA-224,SHA-256,SHA-384,SHA-512算法, 优点: 支持算法多,本...
  • 易语言取QQ哈希值源码,取QQ哈希值,hash
  • 哈希值计算 MD5校验

    2018-06-12 11:25:04
    哈希值计算 MD5校验 哈希值计算 MD5校验 哈希值计算 MD5校验
  • 哈希值碰撞工具.exe

    2020-06-08 18:15:34
    哈希值碰撞工具,通过哈希值,逆向计算出哈希文本,MD5值 。计算机,以及游戏常用的储存数据手段,
  • 哈希值计算器

    2011-11-01 20:35:05
    哈希值及其他数值的计算。更改文件后的哈希值会不一样,比较后会得出结论。
  • 图像哈希值

    2013-11-29 22:23:38
    计算图像哈希值,用于图像比较,搜索,最后得出图像间汉明距离
  • 哈希表、哈希值计算分析引出哈希表哈希表(Hash Table)哈希冲突(Hash Collision)JDK1.8的哈希冲突解决方案哈希函数如何生成 key 的哈希值Integer 的哈希值计算Float 的哈希值计算Long 的哈希值计算那么, `^` 和 ...
  • 1、你可以把哈希值简单地理解成是一段数据(某个文件,或者是字符串)的DNA,或者身份证; 2、通过一定的哈希算法(典型的有MD5,SHA-1等),将一段较长的数据映射为较短小的数据,这段小数据就是大数据的哈希值。...
  • 为您提供HashOnClick 哈希值计算工具下载,HashOnClick是一款哈希值计算工具,可以帮助用户计算哈希值,并且有效支持计算MD5、SHA1、CRC32、MD4、RipeMD-128、RipeMD-160、SHA256、SHA512等多种不同的哈希值。...
  • 文件哈希值计算软件

    2018-12-14 21:51:21
    文件哈希值、MD5计算软件,小巧,快速,防毒必备佳品。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,195
精华内容 16,078
关键字:

哈希值