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

    2021-05-29 08:11:53
    Hash+哈希+哈希函数 hash == 散列 == 哈希 是一种有损压缩技术 是一种数字指纹技术 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数哈希函数是一个公开函数,可以将任意...

    Hash+哈希+哈希函数

     

     

    hash == 散列 == 哈希

    是一种有损压缩技术

    是一种数字指纹技术

     

    哈希是一种加密算法

     

    哈希函数(Hash Function),也称为散列函数或杂凑函数。哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。

     

    它的函数表达式为:h=H(m)

     

    无论输入是什么数字格式、文件有多大,输出都是固定长度的比特串。以比特币使用的Sh256算法为例,无论输入是什么数据文件,输出就是256bit。

    每个bit就是一位0或者1,256bit就是256个0或者1二进制数字串,用16进制数字表示的话,就是多少位呢?

    16等于2的4次方,所以每一位16进制数字可以代表4位bit。那么,256位bit用16进制数字表示,当然是256除以4等于64位。

    于是你通常看到的哈希值,就是这样的了:

    00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8。

    这是从btc.com上随便拷贝的一个哈希值,不放心的话你可以数一下,是不是64位~

     

    哈希算法

    把网址A,转换成数字1。网址B,转换成数字2。

     

    一个网址X,转换成数字N,根据数字N作为下标,就可以快速地查找出网址X的信息。这个转换的过程就是哈希算法。

     

    比如这里有一万首歌,给你一首新的歌X,要求你确认这首歌是否在那一万首歌之内。

     

    无疑,将一万首歌一个一个比对非常慢。但如果存在一种方式,能将一万首歌的每首数据浓缩到一个数字(称为哈希码)中,于是得到一万个数字,那么用同样的算法计算新的歌X的编码,看看歌X的编码是否在之前那一万个数字中,就能知道歌X是否在那一万首歌中。

     

    作为例子,如果要你组织那一万首歌,一个简单的哈希算法就是让歌曲所占硬盘的字节数作为哈希码。这样的话,你可以让一万首歌“按照大小排序”,然后遇到一首新的歌,只要看看新的歌的字节数是否和已有的一万首歌中的某一首的字节数相同,就知道新的歌是否在那一万首歌之内了。

     

    一个可靠的哈希算法,应该满足:

     

    对于给定的数据M,很容易算出哈希值X=F(M);

     

    根据X很难反算出M;

     

    很难找到M和N使得F(N)=F(M)

     

    前面提到哈希函数具有抗碰撞性,碰撞性就是指有人实现找出一奇一偶使得哈希结果一致,但这在计算上是不可行的。

     

    首先,把大空间的消息压缩到小空间上,碰撞肯定是存在的。假设哈希值长度固定为256位,如果顺序取1,2,…2^256+1, 这2^256+1个输入值,逐一计算其哈希值,肯定能找到两个输入值使得其哈希值相同。但不要高兴的太早,因为你得有时间把它算出来,才是你的。

     

    根据生日悖论,如果随机挑选其中的2^128+1输入,则有99.8%的概率发现至少一对碰撞输入。那么对于哈希值长度为256位的哈希函数,平均需要完成2^128次哈希计算,才能找到碰撞对。如果计算机每秒进行10000次哈希计算,需要约10^27年才能完成2^128次哈希计算。在区块链中,哈希函数的抗碰撞性用来做区块和交易的完整性验证,一有篡改就能被识别出来。

    .........................................

    .........................................

    一、什么是 Hash 算法

    散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

     

    Hash 算法能将将任意长度的二进制明文映射为较短的二进制串的算法,并且不同的明文很难映射为相同的 Hash 值。

     

    也可以理解为空间映射函数,是从一个非常大的取值空间映射到一个非常小的取值空间,由于不是一对一的映射,Hash 函数转换后不可逆,意思是不可能通过逆操作和 Hash 值还原出原始的值。

     

    散列方法的主要思想是根据结点的关键码值来确定其存储地址:以关键码值K为自变量,通过一定的函数关系h(K)(称为散列函数),计算出对应的函数值来,把这个值解释为结点的存储地址,将结点存入到此存储单元中。检索时,用同样的方法计算地址,然后到相应的单元里去取要找的结点。通过散列方法可以对结点进行快速检索。散列(hash,也称“哈希”)是一种重要的存储方式,也是一种常见的检索方法。

     

    二、Hash 算法有什么特点

    Hash 值又称为指纹或者摘要,具有以下特点:

    正向快速:给定明文和 Hash 算法,在有限时间和有限资源内能计算得到 Hash 值。

    逆向困难:给定 Hash 值,在有限时间内很难逆推出明文。

    输入敏感:原始输入信息发生任何变化,新的 Hash 值都应该出现很大变化。

    冲突避免:很难找到两段内容不同的明文,使得它们的 Hash 值一致。

     

    三、Hash 算法有哪些

    常见 Hash 算法有 MD5 和 SHA 系列,目前 MD5 和 SHA1 已经被破解,一般推荐至少使用 SHA2-256 算法。

     

    下面我们来看具体写一个 Hash 函数需要注意些什么,首先要明白 Hash 函数是把一个大范围映射到一个小范围,目的往往是为了节省空间,使得数据容易保存,另外 Hash 函数也会应用于查找上。

     

    四、Hash 算法碰撞

    稍微想一下就可以发现,既然输入数据长度不固定,而输出的哈希值却是固定长度的,这意味着哈希值是一个有限集合,而输入数据则可以是无穷多个,那么建立一对一关系明显是不现实的。所以“碰撞”是必然会发生的,所以一个成熟的哈希算法会有较好的抗冲突性,同时在实现哈希表的结构时也要考虑到哈希冲突的问题。

     

    比如“666”经过 Hash 后是“fae0b27c451c728867a567e8c1bb4e53”,相同 Hash 算法得到的值是一样的。比如 WiFi 密码如果是 8 位纯数字的话,顶多就是 99999999 种可能性,破解这个密码需要做的就是提前生成好 0 到 1 亿数字的 Hash 值,然后做 1 亿次布尔运算(就是 Bool 值判断,0 或者 1),而现在普通 I5 四核 CPU 每秒能到达 200 亿次浮点数计算,做 1 亿次布尔运算也就是秒级别的时间就破解了。

     

    所以密码尽量不要用纯数字,因为根本没有任何安全性。

     

    五、加盐防碰撞

    对数字内容进行 Hash 运算,获取唯一的摘要值来指代原始完整的数字内容,利用 Hash 函数的抗碰撞性来确保内容未被篡改。

     

    常用于用户名和密码来确保用户信息安全,为了防止攻击会采用加盐的方法,就是原来的明文加上一个随机数之后的 Hash 值,Hash 值和盐会保存在两个地方,只要不是同时泄漏就很难被破解。

     

    参考:哈希(Hash)算法

    参考:通俗易懂的哈希算法讲解

    展开全文
  • 什么是哈希函数

    千次阅读 2020-09-25 11:45:24
    简单来说就是一种将任意长度的输入消息压缩成某一固定长度的消息摘要的函数。 它具备以下的性质(哈希函数所必须的性质): H可应用于任意大小的数据块。 H产生定长的输出。 对任意给定的x,计算H(x)比较容易...

    Hash函数译为哈希函数,又称散列函数。是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出的值称为散列值或消息摘要。简单来说就是一种将任意长度的输入消息压缩成某一固定长度的消息摘要的函数

     

    它具备以下的性质(哈希函数所必须的性质):

    1. H可应用于任意大小的数据块。
    2. H产生定长的输出。
    3. 对任意给定的x,计算H(x)比较容易,用硬件和软件均可以实现。

    出于安全性考虑,对哈希函数的三个安全性假设:

    1. 对任意给定的散列值h,找到满足H(x)=h的x在计算上是不可行的,称之为单向性。
    2. 对任意给定的分组x,找到满足y≠x,且H(x)=H(y)的y在计算上是不可行的,称之为抗弱碰撞性。
    3. 找到任何满足H(x)=H(y)的偶对x=y在计算上是不可行的,称之为抗强碰撞性。

    满足这三个安全性假设的安全Hash函数称作碰撞稳固的Hash函数。

    展开全文
  • 哈希函数

    2019-09-23 10:52:55
    哈希函数 定义:Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常...

    哈希函数

    定义:Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

    特点:

    1、input:是无穷大的(任意的),output是有限的

    2、相同的输入,输出一定是相同的;不同的输入,输出也可能是相同的

    3、离散型:输出和输入没有上面关系

    4、均匀性:对于输出域里的每一个值几乎是等概率出现的。在输出域上是均匀分布的。

    哈希方法学

    1、基于加法和乘法的散列

    这种方式是通过遍历数据中的元素然后每次对某个初始值进行加操作,其中加的值和这个数据的一个元素相关。通常这对某个元素值的计算要乘以一个素数。

    2、基于移位的散列

    和加法散列类似,基于移位的散列也要利用字符串数据中的每个元素,但是和加法不同的是,后者更多的而是进行位的移位操作。通常是结合了左移和右移,移的位数的也是一个素数。每个移位过程的结果只是增加了一些积累计算,最后移位的结果作为最终结果。

    常用的哈希函数:

    1、RS

    public long RSHash(String str)  
       {  
          int b     = 378551;  
          int a     = 63689;  
          long hash = 0;  
          for(int i = 0; i < str.length(); i++)  
          {  
             hash = hash * a + str.charAt(i);  
             a    = a * b;  
          }  	
          return hash;  
       }  
    

    2、JS(位用运算的哈希函数)

    public long JSHash(String str)  
       {  
          long hash = 1315423911;  
          for(int i = 0; i < str.length(); i++)  
          {  
             hash ^= ((hash << 5) + str.charAt(i) + (hash >> 2));  
          }  
          return hash;  
       }  
    

    应用场景:

    40亿个无符号的整数(在磁盘),最多可使用1G的内存,统计哪个整数出现的次数最多的。

    展开全文
  • 密码学哈希函数 什么是哈希函数? (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

    密码学哈希函数

    展开全文
  • python字典中哈希函数Hashing is a key part of most programming languages. Large amounts of data can be represented in a fixed buffer. Key-value structures use hashes to store references. 散列是大多数...
  • 哈希函数基础

    万次阅读 2016-07-31 15:33:42
    1. 哈希函数又称散列函数,杂凑函数,他是一个单向密码体制,即从明文到密文的不可逆映射,只有加密过程没有解密过程,哈希函数可以将任意长度的输入经过变化后得到固定长度的输出,这个固定长度的输出称为原消息的...
  • 哈希函数哈希

    2021-01-16 11:00:42
    哈希函数哈希表? 哈希函数哈希表是非常重要的内容,在面试的时候最经常使用。...哈希表开头就是哈希域,这个一般是经过我们压缩了的哈希域,但是可以保证离散性。 Hash函数不是用来排序的,hashm
  • 密码学哈希函数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 ...
  • 什么是哈希Hash(散列函数)

    千次阅读 2019-07-04 16:02:00
    Hash(散列函数) Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成...简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数 基本...
  • 哈希函数(散列函数)详解

    千次阅读 2017-12-19 00:40:59
    哈希函数(散列函数)Hash,一般翻译做”散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,...
  • 哈希表与哈希函数

    2010-12-31 11:41:00
    哈希查找因使用哈希 (Hash) 函数而得名,哈希函数又叫散列函数,它是一种能把关键字映射成记录存贮地址的函数。 一.哈希表 ①它是一种能把关键字映射成记录存贮地址的函数。 ②假定数组 HT[0 ~ m-1] 为存贮...
  • 哈希函数(hash函数

    2018-11-19 10:31:00
    这种转换是一种压缩映射,即,哈希值空间通常比输入空间小得多,不同的输入可能会散列到相同的输出,但对于给定的一个散列值,无法唯一确定其输入值,也就是说这个过程是不可逆的。简单的说就是一种将任意长度的消息...
  • 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. 操作步骤...
  • 1哈希函数是密码学的一个重要分支,该函数是一类数学函数,它可以在有限的合理时间内,将任意长度的消息变换成固定长度的二进制串,且不可逆,这个输出值就是哈希值,也叫散列值或消息摘要。以hash函数为基础的...
  • 一,什么是哈希函数? 二,哈希碰撞(hash collision)的解决方式 三,什么是好的哈希函数? 四,哈希函数的构造方法 五,哈希表(hash table)原理
  • 作者 |代号[K]责编 | Carol来源 |CSDN 博客Hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长...
  • 哈希函数理解

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

    2018-12-19 15:06:16
    可以用余数计算星期,web中用来分页 ...哈希(散列)函数:将任意长度的输入,通过哈希算法,压缩为某一固定长度的输出。 f(x) = x(等待被转换的值) mod(取余操作) size(有限存储空间的大...
  • 可以明显的看到,原始数据经过哈希函数的映射后称为了一个个的哈希编码,数据得到压缩哈希函数是实现哈希表和布隆过滤器基础。 2. 判定一个元素是否存在于集合 如何查看一个东西是否在有大量数据的池子里面。 ...
  • 哈希表与哈希函数  哈希查找因使用哈希 (Hash) 函数而得名,哈希函数又叫散列函数,它是一种能把关键字映射成记录存贮地址的函数。  一.哈希表 ①它是一种能把关键字映射成记录存贮地址的函数。 ②假定...
  • 哈希函数和消息认证

    2020-12-29 21:39:24
    文章目录一、哈希(Hash)函数1、Hash函数的概念2、Hash函数结构3、Hash函数的应用二、Hash算法1、MD5算法2、SHA1算法三、Hash函数的攻击1、生日悖论:四、消息论证1、消息认证基础理论2、消息认证码3、基于DES的消息...
  • 哈希函数的构造方法: 直接定址法 数字分析法 平方取中法 除留余数法 解决哈希冲突的方法 开放地址法-线性探查法 容易产生堆积,即存储太多时,没地方放。 链地址法 链表定义的方法。 链地址法 ...
  • 哈希函数是一个公开函数,可以将任意长度的消息M映射成为一个长度较短且长度固定的值H(M),称H(M)为哈希值、散列值(Hash Value)、杂凑值或者消息摘要(Message Digest)。它是一种单向密码体制,即一个从明文...
  • 哈希函数密码学

    2019-02-22 23:37:02
    哈希函数是密码学的一个重要分支,该函数是一类数学函数,它可以在有限的合理时间内,将任意长度的消息变换成固定长度的二进制串,且不可逆,这个输出值就是哈希值,也叫散列值或消息摘要。以hash函数为基础的hash...
  • 安全哈希函数哈希函数定义 Hash一般翻译做散列也有直接音译为哈希的就是把任意长度的输入又叫 做预映射pre-image通过散列算法变换成固定长度的输出该输出就是散列值这 种转换是一种压缩映射也就是散列值的空间...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,382
精华内容 17,352
关键字:

哈希中压缩函数是什么