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

    万次阅读 多人点赞 2018-03-01 08:12:14
    在某种程度上,散列是与排序相反的一种操作,排序是将集合中的元素按照某种方式比如字典顺序排列在一起,而散列通过计算哈希值,打破元素之间原有的关系,使集合中的元素按照散列函数的分类进行排列。在介绍一些集合...

    什么是 Hash

    Hash(哈希),又称“散列”。

    散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。

    在某种程度上,散列是与排序相反的一种操作,排序是将集合中的元素按照某种方式比如字典顺序排列在一起,而散列通过计算哈希值,打破元素之间原有的关系,使集合中的元素按照散列函数的分类进行排列。

    在介绍一些集合时,我们总强调需要重写某个类的 equlas() 方法和 hashCode() 方法,确保唯一性。这里的 hashCode() 表示的是对当前对象的唯一标示。计算 hashCode 的过程就称作 哈希。

    为什么要有 Hash

    我们通常使用数组或者链表来存储元素,一旦存储的内容数量特别多,需要占用很大的空间,而且在查找某个元素是否存在的过程中,数组和链表都需要挨个循环比较,而通过 哈希 计算,可以大大减少比较次数

    这里写图片描述

    举个栗子:

    现在有 4 个数 {2,5,9,13},需要查找 13 是否存在。

    1.使用数组存储,需要新建个数组 new int[]{2,5,9,13},然后需要写个循环遍历查找:

        int[] numbers = new int[]{2,5,9,13};
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] == 13){
                System.out.println("find it!");
                return;
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这样需要遍历 4 次才能找到,时间复杂度为 O(n)。

    2.而假如存储时先使用哈希函数进行计算,这里我随便用个函数:

     H[key] = key % 3;
    
    • 1
    • 2

    四个数 {2,5,9,13} 对应的哈希值为:

     H[2] = 2 % 3 = 2;
     H[5] = 5 % 3 = 2;
     H[9] = 9 % 3 = 0;
     H[13] = 13 % 3 = 1;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后把它们存储到对应的位置。

    当要查找 13 时,只要先使用哈希函数计算它的位置,然后去那个位置查看是否存在就好了,本例中只需查找一次,时间复杂度为 O(1)。

    因此可以发现,哈希 其实是随机存储的一种优化,先进行分类,然后查找时按照这个对象的分类去找。

    哈希通过一次计算大幅度缩小查找范围,自然比从全部数据里查找速度要快。

    比如你和我一样是个剁手族买书狂,家里书一大堆,如果书存放时不分类直接摆到书架上(数组存储),找某本书时可能需要脑袋从左往右从上往下转好几圈才能发现;如果存放时按照类别分开放,技术书、小说、文学等等分开(按照某种哈希函数计算),找书时只要从它对应的分类里找,自然省事多了。

    哈希函数

    哈希的过程中需要使用哈希函数进行计算。

    哈希函数是一种映射关系,根据数据的关键词 key ,通过一定的函数关系,计算出该元素存储位置的函数。

    表示为:

    address = H [key]

    几种常见的哈希函数(散列函数)构造方法

    • 直接定址法 
      • 取关键字或关键字的某个线性函数值为散列地址。
      • 即 H(key) = key 或 H(key) = a*key + b,其中a和b为常数。
      • 比如这里写图片描述
    • 除留余数法 
      • 取关键字被某个不大于散列表长度 m 的数 p 求余,得到的作为散列地址。
      • 即 H(key) = key % p, p < m。 
      • 比如这里写图片描述
    • 数字分析法 
      • 当关键字的位数大于地址的位数,对关键字的各位分布进行分析,选出分布均匀的任意几位作为散列地址。
      • 仅适用于所有关键字都已知的情况下,根据实际应用确定要选取的部分,尽量避免发生冲突。
      • 比如 这里写图片描述
    • 平方取中法 
      • 先计算出关键字值的平方,然后取平方值中间几位作为散列地址。
      • 随机分布的关键字,得到的散列地址也是随机分布的。
      • 比如 这里写图片描述
    • 折叠法(叠加法) 
      • 将关键字分为位数相同的几部分,然后取这几部分的叠加和(舍去进位)作为散列地址。
      • 用于关键字位数较多,并且关键字中每一位上数字分布大致均匀。 
      • 比如 这里写图片描述
    • 随机数法 
      • 选择一个随机函数,把关键字的随机函数值作为它的哈希值。
      • 通常当关键字的长度不等时用这种方法。 

    构造哈希函数的方法很多,实际工作中要根据不同的情况选择合适的方法,总的原则是尽可能少的产生冲突

    通常考虑的因素有关键字的长度分布情况哈希值的范围等。

    如:当关键字是整数类型时就可以用除留余数法;如果关键字是小数类型,选择随机数法会比较好。

    哈希冲突的解决

    选用哈希函数计算哈希值时,可能不同的 key 会得到相同的结果,一个地址怎么存放多个数据呢?这就是冲突。

    常用的主要有两种方法解决冲突:

    1.链接法(拉链法)

    拉链法解决冲突的做法是: 
    将所有关键字为同义词的结点链接在同一个单链表中。

    若选定的散列表长度为 m,则可将散列表定义为一个由 m 个头指针组成的指针数组 T[0..m-1] 。

    凡是散列地址为 i 的结点,均插入到以 T[i] 为头指针的单链表中。 
    T 中各分量的初值均应为空指针。

    在拉链法中,装填因子 α 可以大于 1,但一般均取 α ≤ 1。

    这里写图片描述

    2.开放定址法

    用开放定址法解决冲突的做法是:

    用开放定址法解决冲突的做法是:当冲突发生时,使用某种探测技术在散列表中形成一个探测序列。沿此序列逐个单元地查找,直到找到给定的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探测到开放的地址则表明表中无待查的关键字,即查找失败。

    简单的说:当冲突发生时,使用某种探查(亦称探测)技术在散列表中寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到

    按照形成探查序列的方法不同,可将开放定址法区分为线性探查法、二次探查法、双重散列法等。

    a.线性探查法

    hi=(h(key)+i) % m ,0 ≤ i ≤ m-1 

    基本思想是: 
    探查时从地址 d 开始,首先探查 T[d],然后依次探查 T[d+1],…,直到 T[m-1],此后又循环到 T[0],T[1],…,直到探查到 有空余地址 或者到 T[d-1]为止。

    b.二次探查法

    hi=(h(key)+i*i) % m,0 ≤ i ≤ m-1 

    基本思想是: 
    探查时从地址 d 开始,首先探查 T[d],然后依次探查 T[d+1^2],T[d+2^2],T[d+3^2],…,等,直到探查到 有空余地址 或者到 T[d-1]为止。

    缺点是无法探查到整个散列空间。

    c.双重散列法

    hi=(h(key)+i*h1(key)) % m,0 ≤ i ≤ m-1 

    基本思想是: 
    探查时从地址 d 开始,首先探查 T[d],然后依次探查 T[d+h1(d)], T[d + 2*h1(d)],…,等。

    该方法使用了两个散列函数 h(key) 和 h1(key),故也称为双散列函数探查法。

    定义 h1(key) 的方法较多,但无论采用什么方法定义,都必须使 h1(key) 的值和 m 互素,才能使发生冲突的同义词地址均匀地分布在整个表中,否则可能造成同义词地址的循环计算。

    该方法是开放定址法中最好的方法之一。

    哈希的应用

    • 哈希表
    • 分布式缓存

    哈希表(散列表)

    哈希表(hash table)是哈希函数最主要的应用。

    哈希表是实现关联数组(associative array)的一种数据结构,广泛应用于实现数据的快速查找。

    这里写图片描述

    用哈希函数计算关键字的哈希值(hash value),通过哈希值这个索引就可以找到关键字的存储位置,即桶(bucket)。哈希表不同于二叉树、栈、序列的数据结构一般情况下,在哈希表上的插入、查找、删除等操作的时间复杂度是 O(1)。

    查找过程中,关键字的比较次数,取决于产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。 
    影响产生冲突多少有以下三个因素:

    1. 哈希函数是否均匀;
    2. 处理冲突的方法;
    3. 哈希表的加载因子。

    哈希表的加载因子和容量决定了在什么时候桶数(存储位置)不够,需要重新哈希。

    加载因子太大的话桶太多,遍历时效率变低;太大的话频繁 rehash,导致性能降低。所以加载因子的大小需要结合时间和空间效率考虑。

    在 HashMap 中的加载因子为 0.75,即四分之三。

    分布式缓存

    网络环境下的分布式缓存系统一般基于一致性哈希(Consistent hashing)。简单的说,一致性哈希将哈希值取值空间组织成一个虚拟的环,各个服务器与数据关键字K使用相同的哈希函数映射到这个环上,数据会存储在它顺时针“游走”遇到的第一个服务器。可以使每个服务器节点的负载相对均衡,很大程度上避免资源的浪费。

    在动态分布式缓存系统中,哈希算法的设计是关键点。使用分布更合理的算法可以使得多个服务节点间的负载相对均衡,可以很大程度上避免资源的浪费以及部分服务器过载。 使用带虚拟节点的一致性哈希算法,可以有效地降低服务硬件环境变化带来的数据迁移代价和风险,从而使分布式缓存系统更加高效稳定。

    Thanks

    http://www.nowamagic.net/librarys/veda/detail/1273

    http://blog.csdn.net/cywosp/article/details/23397179/

    http://www.cnblogs.com/qiaoshanzi/p/5295554.html

    http://baike.baidu.com/view/549615.htm

    https://books.google.co.jp/books?id=wCWmdhdX1AYC&pg=PA214&lpg=PA214&dq=%E6%95%B0%E5%AD%97%E5%88%86%E6%9E%90%E6%B3%95&source=bl&ots=5ieOT99Dob&sig=UcYbua2lwYocCQr32HF0XDF34h4&hl=zh-CN&sa=X&ved=0ahUKEwj104zw__fPAhUDw7wKHf3cAhIQ6AEISzAJ#v=onepage&q=%E6%95%B0%E5%AD%97%E5%88%86%E6%9E%90%E6%B3%95&f=false

    http://sjjp.tjuci.edu.cn/sjjg/DataStructure/DS/web/chazhao/chazhao9.4.3.3.htm

    http://www.cnblogs.com/qiaoshanzi/p/5295554.html

    (function () {('pre.prettyprint code').each(function () { var lines = (this).text().split(\n).length;varnumbering = $('').addClass('pre-numbering').hide();(this).addClass(hasnumbering).parent().append(numbering); for (i = 1; i
    展开全文
  • 密码学哈希函数 什么是哈希函数? (What is a Hash Function?) A Hash Function is a mathematical function that converts a numerical value into another compressed numeric value. So, it compresses the text....

    密码学哈希函数

    什么是哈希函数? (What is a Hash Function?)

    A Hash Function is a mathematical function that converts a numerical value into another compressed numeric value. So, it compresses the text. Also, it should be noted that the input value for the hash functions can be of arbitrary length, but the output text that it will produce will always be of fixed length.

    哈希函数是一种数学函数,可将数字值转换为另一个压缩数字值。 因此,它压缩文本。 另外,应注意,哈希函数的输入值可以是任意长度,但是它将产生的输出文本始终是固定长度。

    Representation of the hash function:

    哈希函数的表示形式:

    The hash functions are usually represented through capital H symbol,

    哈希函数通常用大写的H符号表示,

        H (M) = C
    
    

    Here,

    这里,

    • H() denotes the hash function.

      H()表示哈希函数。

    • M denotes the input value (in numeric form)

      M表示输入值(数字形式)

    • And, C denotes the compressed output value, also in numeric form.

      并且, C也以数字形式表示压缩输出值。

    哈希函数的属性 (Properties of Hash Functions)

    1. Compressed output

      压缩输出

      The hash function always produces a compressed value of the input provided to it.

      哈希函数始终会产生提供给它的输入的压缩值。

    2. Fixed Length Output

      定长输出

      No matter what may be the length of the input value to the hash function, the output that it produces is always of fixed length.

      无论哈希函数的输入值的长度是多少,它生成的输出始终是固定长度的。

    3. Pre-Image Resistance

      像前电阻

      It is computationally hard to reverse a Hash function. This is due to its compressive nature.

      在计算上很难逆转哈希函数。 这是由于其压缩性质。

      H (X) = Z

      H(X)= Z

      Suppose we are provided the

      假设我们提供了

      Z value, then it is almost impossible to predict the input value X. This protects the system and data from hackers and attackers who have a hash value and are trying to find the input.

      Z值,那么几乎不可能预测输入值X。 这样可以保护系统和数据免受具有哈希值并试图查找输入的黑客和攻击者的侵害。

    4. Second pre-Image Resistance

      二次成像前电阻

      As the hash functions are compression function with a fixed-length output, it is very hard (almost practically impossible) to have the same hash values for two values. This means that our function also provides us the security from the brute force attacks, because:

      由于哈希函数是具有固定长度输出的压缩函数,因此很难为两个值具有相同的哈希值(几乎几乎是不可能的)。 这意味着我们的职能还为我们提供了免受暴力攻击的安全性,因为:

      H (x) ≠ H (y).

      H(x)≠H(y)

    5. Collision Resistance

      耐碰撞

      As it is extremely hard to find the second pre-Image of the hash function, this implies that it is rare (almost impossible) for the Hash function to have a collision. Therefore, the hash function is almost collision-free.

      由于很难找到哈希函数的第二个pre-Image,这意味着哈希函数很少(几乎不可能)发生冲突。 因此,哈希函数几乎没有冲突。

    哈希函数的应用和使用 (Applications and uses of the hash functions)

    1. Encryption techniques: Due to the irreversible nature and collision-free properties, the hash function finds its wide use in the advanced encryption techniques used nowadays for ensuring data security and privacy.

      加密技术 :由于不可逆的性质和无冲突的特性,哈希函数在当今用于确保数据安全性和隐私性的高级加密技术中得到了广泛的应用。

    2. Used for authentications and integrity checks.

      用于身份验证和完整性检查

    3. To minimize the storage space: As the Hash function is compressive, it takes less amount of space to store the hash value than the original space. This provides us with an efficient way to store our data.

      最小化存储空间 :由于哈希函数具有压缩性,因此存储哈希值所需的空间要少于原始空间。 这为我们提供了一种存储数据的有效方法。

    哈希函数的缺点 (Drawbacks of the Hash Functions)

    1. Data retrieval almost impossible:

      数据检索几乎是不可能的

      If you want to store the data in compressed form to minimize space allocation, you can do it with Hash functions but you cannot retrieve back the data in its original form. Therefore, it is better to compress those values using hash functions which will later not be required in its original form and will be required only to check the integrity and correctness.

      如果要以压缩形式存储数据以最大程度地减少空间分配,则可以使用哈希函数进行处理,但是无法以原始形式检索回数据。 因此,最好使用散列函数压缩这些值,这些散列函数以后将不再需要其原始形式,而仅在检查完整性和正确性时才需要。

    2. Complexity:

      复杂度

      The Hash functions are very complex to understand and implement.

      哈希函数很难理解和实现。

    翻译自: https://www.includehelp.com/cryptography/hash-function.aspx

    密码学哈希函数

    展开全文
  • Hash(哈希)相关知识(哈希函数、哈希查找)

    万次阅读 多人点赞 2020-05-18 21:04:17
    函数特性1.1 基本的哈希函数1.2 加密的哈希函数2. 常见的哈希函数构造法2.1 直接寻址法2.2 数字分析法2.3 平方取中法2.4 折叠法2.5 随机数法2.6 除留余数法2.7 加密哈希函数3. 哈希函数总结二. 哈希查找1. 操作步骤...

    前言

    • 因为本人是小白(小菜鸡),所以有些地方说的可能不是很准确,大家可以参考一些很厉害的博主,在评论区指出我写的不对的地方。
    • 本来是想要单独写一下Hash(哈希)查找算法,但后来想到Java和区块链的入门里面都涉及到Hash,所以就说一下自己对Hash的理解。
    • 在写的过程中,有涉及到密码学的相关概念,我尽力用举例子的方式让读者明白,如果觉得我有哪里说的不准确,可以查找相关文献进行更深层次的理解,以免我误人子弟,顺便谢谢大家啦!

    一. 哈希函数

    1. 函数特性

    1.1 基本的哈希函数

    • 哈希函数是一个数学函数,特性有下面三点:
    • 其输入可为任意大小的字符串。
    • 它产生固定大小的输出。
    • 它能进行有效的计算,就是说对于特定的输入字符串,在合理时间内,能够计算出哈希函数的输出,对n位的字符串,哈希值计算的复杂度是O(n)。

    1.2 加密的哈希函数

    • 主要有附加的三个特性(相关文字说明源于BITCOIN AND CRYPTOCURRENCY TECHNOLOGIES 区块链技术驱动金融-数字货币与智能合约技术):
    • 碰撞阻力:对于两个不同的输入,能够产生相同的输出,就像y=x2,key1≠key2,但是产生了H(key1)=H(key2)。实际上世界上根本不存在具有防碰撞特性的哈希函数,现在技术上所用的加密哈希函数只不过是还没有找到碰撞的函数,就像之前人们都用的MD5,在前几年找到了碰撞后就逐渐淡出市场。
    • 隐秘性:如果我们无法通过输出y=H(x)来找到输入x,那么就保证了隐秘性。但要满足这样条件的x必须取自一个非常大的集合,否则x将很容易就被获取。例如,我们抛硬币,只需要知道结果就很容易穷举出x的确定值。
    • 谜题友好:这个特性听起来是人畜无害的,其实用我的话来解释就是盲目的穷举一个巨大无比的数据集,而要求是要找到一个小区域内的值。用人话来说就是,给你一个地球这么大的区域,让你通过穷举来寻找你家小区或者一个超市或者一个城市的区域,这个所要寻找的区域往往越小,难度越高(正常人都能看出来)。而这个谜题取自哪里也非常重要,谜题往往取自高阶最小熵分布,这样就保证了没有捷径能走。

    2. 常见的哈希函数构造法

    • 相信大家都接触过数据结构,在那里面讲到过很多种构建哈希函数的方法和存储方式,咱也列举一下(有的是复制粘贴的,因为在数据结构中都有讲到)。
    • 百度词条哈希表和相应问题处理方法

    2.1 直接寻址法

    • 取关键字或关键字的某个线性函数值为散列地址。即hash(k) = k 或 hash(k) = a · k + b,其中a、b为常数(这种散列函数叫做自身函数)。

    2.2 数字分析法

    • 这种方法是对重复性比较高的位进行查找,然后多选几位组成哈希地址,避免冲突增加。

    2.3 平方取中法

    • 取关键字平方后的中间几位为哈希地址。通常在选定哈希函数时不一定能知道关键字的全部情况,取其中的哪几位也不一定合适,而一个数平方后的中间几位数和数的每一位都相关,由此使随机分布的关键字得到的哈希地址也是随机的。取的位数由表长决定。

    2.4 折叠法

    • 将关键字分割成位数相同的几部分(最后一部分的位数可以不同),然后取这几部分的叠加和(舍去进位)作为哈希地址。

    2.5 随机数法

    • 选择一个随机函数,取关键字的随机函数值作为它的哈希地址,即H(key)=random(key),其中random为随机函数。通常用于关键字长度不等时的场合。

    2.6 除留余数法

    • 取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址。即H(key)=key MOD p(p<=m)。
    • 不仅可以对关键字直接取模,也可在折叠法、平方取中法等运算之后取模。对p的选择很重要,一般取素数或m,若p选择不好,容易产生冲突。

    2.7 加密哈希函数

    • 这里介绍安全哈希算法(SHA - 256),主要是被比特币采用的哈希函数。
    • 与它相关的概念叫压缩函数(compression function)。在通用术语中,将接受固定长度的哈希函数转化为可接受任意长度输入的哈希函数,这种转换过程叫MD(Merkle-Damgard)变换。一般来说这种基础型,可用于固定长度,并且具备碰撞阻力的哈希函数就是压缩函数。
    • SHA - 256就是利用了压缩函数将一个768位的输入压缩成256位的输出,每一个区块的大小是512位。
    • 对于以上所说的知识,可以在百度上搜,或者看区块链的书。

    3. 哈希函数总结

    • 哈希函数并不是越复杂越好,而是根据需求进行设计和使用,因为哈希函数越复杂,时间消耗越长,对性能也有一定的影响。

    二. 哈希查找

    1. 操作步骤

    • 用给定的哈希函数构造哈希表。
    • 根据选择的冲突处理方法解决地址冲突。
    • 在哈希表的基础上执行哈希查找。

    2.哈希表的查找

    • 哈希表的查找效率主要取决于哈希函数的构造方式、处理冲突的方式和装填因子。

    2.1 哈希冲突

    • 其实原理就是上面讲的碰撞,为了处理冲突,有这几种处理方法:
    • 百度词条哈希查找,这里面讲的还可以,有资源的可以在网上找具体操作,当然数据结构中的hash也讲过这几个方法,可以去找课件和书。

    2.1.1 开放寻址法

    • 如果产生冲突,就找个空地址塞进去,当然要保证散列地址足够大。
    • 这种方法细分为3种,分别是线性探测再散列、二次探测再散列、伪随机探测再散列,详细的设计方法和原理在上面的链接里也有。

    2.1.2 链地址法

    • 将所有同关键字的记录存储在一个单链表中,称这种表为同义词子表,在散列表中只存储所有同义词子表的头指针。
    • 这种方法有点像用链表构成树。

    2.1.3 再散列法

    • 提前准备多个散列函数,如果其中一个找不到合适的位置,那就换一个散列函数。

    2.1.4 建立公共溢出区

    • 粗暴方式,只要发生冲突就填进公共溢出区。

    2.2 装填因子

    • 散列表的装填因子定义为:α= 填入表中的元素个数 / 散列表的长度
    • α是散列表装满程度的标志因子。
    • 由于表长是定值,α与填入表中的元素个数成正比,所以,α越大,填入表中的元素较多,产生冲突的可能性就越大;α越小,填入表中的元素较少,产生冲突的可能性就越小。
    • 实际上,散列表的平均查找长度是装填因子α的函数,只是不同处理冲突的方法有不同的函数。

    三. 总结

    • HashMap就是由数组+链表组合成的,也就是链地址法,在这篇里主要讲的就是哈希相关的东西,HashMap改天再说。
    • 哈希函数的构造不是越复杂越好,合适就行了,因为不同的应用由不同的需求,根据需求选择合适的结构就行了,性能方面也要考虑,例如HashMap只要尽量的减少它的链表就能提高它执行的性能。
    展开全文
  • 用于加密的哈希函数

    千次阅读 2012-11-17 04:39:12
    用于加密的哈希函数(Cryptographic Hashing Function)具有什么样的特点呢? A cryptographic hash function is a hash function; that is, an algorithm that takes an arbitrary block of dataand ...

    用于加密的哈希函数(Cryptographic Hashing Function)具有什么样的特点呢?

    cryptographic hash function is a hash function; that is, an algorithm that takes an arbitrary block of dataand returns a fixed-size bit string, the (cryptographichash value, such that an (accidental or intentional) change to the data will (with very high probability) change the hash value. The data to be encoded are often called the "message," and the hash value is sometimes called the message digest or simply digest.

    The ideal cryptographic hash function has four main or significant properties:

    • it is easy to compute the hash value for any given message
    • it is infeasible to generate a message that has a given hash
    • it is infeasible to modify a message without changing the hash
    • it is infeasible to find two different messages with the same hash

    Cryptographic hash functions have many information security applications, notably in digital signatures,message authentication codes (MACs), and other forms of authentication. They can also be used as ordinaryhash functions, to index data in hash tables, for fingerprinting, to detect duplicate data or uniquely identify files, and as checksums to detect accidental data corruption. Indeed, in information security contexts, cryptographic hash values are sometimes called (digitalfingerprints, checksums, or just hash values,even though all these terms stand for functions with rather different properties and purposes.


    哈希函数的广泛用途:

    • 加密(Encryption)
    • 索引(Indexing)
    • 校验(Checksum)
    • 压缩(Compression)


    展开全文
  • 密码学哈希函数A Hash Function is a mathematical function that converts a numerical value into another compressed numeric value. The input value for the hash functions can be of arbitrary length, but ...
  • 密码学哈希函数

    千次阅读 2017-08-22 21:52:24
    什么是哈希函数哈希函数是一个数学函数,其具有以下三个特性: 输入可以为任意大小的字符串;其产生固定大小的输出;对于特定的输入字符串,能在合理时间计算出结果。对应n位的字符串,其哈希值计算的复杂度...
  • 数据结构之哈希函数

    千次阅读 2016-12-07 10:43:43
    哈希表(hashTable)哈希表之前讲过,有需要的可以参考:点击打开哈希表哈希函数哈希函数就是将某一不定长的对象映射为另一个定长的对象。能够做到这一点的函数有很多,那什么可以作为哈希函数?这里我们首先要明确...
  • 哈希函数和哈希表

    千次阅读 2019-05-08 16:31:12
    经典哈希函数的性质(散列函数) 1.输入域无穷大 2.输出域是有穷尽的 3.输入参数相同,返回哈希值不变(不是随机函数) 4.输入不同,哈希值亦可能相同,哈希碰撞 5.离散性:举例:input-0~98,out-0、1、2,...
  • 常用哈希函数介绍

    2021-03-31 16:21:32
    哈希函数介绍 什么是哈希?在记录的关键字与记录的存储地址之间建立的一种对应关系叫哈希函数哈希函数就是一种映射,是从关键字到存储地址的映射。 通常,包含哈希函数的算法的算法复杂度都假设为O(1),这就是为...
  • 哈希函数sha-256流程 这将是哈希函数的基本介绍。 我将假设我的大多数读者都在这里,以了解为什么使用哈希函数以及它们为什么起作用的基本概念。 我的目标是从一般意义上解释它,我将省略证明和实现细节,而将重点...
  • 平时收集的一些哈希函数用于多种不同的环境
  • 前几天在看sina技术团队写的memcached源代码分析,当中提到使用这篇论文的算法实现KV的哈希。好好看下这片论文,翻译备用。 This paper presents new hash functions for table lookup using 32-bit or 64-bit ...
  • 哈希函数有关知识

    2014-06-01 17:11:06
    一.哈希函数的构造方法
  • 重温数据结构:哈希 哈希函数 哈希表

    万次阅读 多人点赞 2016-10-27 00:49:30
    在学习 HashMap 前,我们先来温习下 Hash(哈希) 的概念。 什么是 HashHash(哈希),又称“散列”。散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。在某种程度上,散列是与排序相反的一种操作,...
  • 哈希表查找的基本思想是:根据当前带查找数据的特征,以记录关键字为自变量,设计一个哈希函数,以该函数按关键码计算该元素的存储位置,并按此存放;查找时,有同一个函数对给定值key计算地址,将key与地址单元中...
  • 哈希函数 哈希表

    千次阅读 2017-01-04 14:25:13
    在学习 HashMap 前,我们先来温习下 Hash(哈希) 的概念。 什么是 HashHash(哈希),又称“散列”。散列(hash)英文原意是“混杂”、“拼凑”、“重新表述”的意思。在某种程度上,散列是与排序相反的一种操作,...
  • 单向散列函数-指纹-哈希函数1. 什么是单向散列函数2.单向散列函数的性质2.1. 根据任意长度的消息计算出固定长度的散列值2.2. 能够快速计算出散列值2.3. 消息不同散列值也不同2.4. 具备单向性3.术语4. 单向散列函数的...
  • 什么是哈希? 比方我有个原始值,“老铁双击666”, 通过某种算法(比如java的hasecode(获得变量的物理信息))得到的“哈希码”是“254874125”(将字符串转换成尽可能不重复的int类型数字), 然后通过哈希算法(如...
  • 哈希函数的一些知识

    2020-12-10 06:44:46
    什么是哈希函数哈希函数是一个数学函数,其具有以下三个特性: 输入可以为任意大小的字符串; 其产生固定大小的输出; 对于特定的输入字符串,能在合理时间计算出结果。对应n位的字符串,其哈希值计算的...
  • 第18篇 哈希函数

    千次阅读 2020-07-06 08:18:57
    本文试图解释哈希函数的作用、标准、实现方式以及区块链哪些地方用到了它。 本文中的哈希和hash是同一个词意,有可能会交叉出现。 本文中的哈希有可能是名词(哈希函数、哈希算法),也有可能是动词(把这段数据...
  • 比特币哈希函数简述

    万次阅读 2017-02-20 13:58:31
    对比特币感兴趣的人或多或少应该都听说过“加密哈希函数(cryptographic hash function)”这个术语。但是它究竟是什么意思,与加密货币又有什么联系? 哈希函数不仅是比特币协议的重要部分,还是也是整个信息...
  • 哈希函数理解

    千次阅读 2018-05-08 21:49:35
     Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。  散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的...
  • 哈希函数密码学

    2019-02-22 23:37:02
    哈希函数是密码学中的一个重要分支,该函数是一类数学函数,它可以在有限的合理时间内,将任意长度的消息变换成固定长度的二进制串,且不可逆,这个输出值就是哈希值,也叫散列值或消息摘要。以hash函数为基础的hash...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 124,540
精华内容 49,816
关键字:

哈希函数可用于