zoukankan      html  css  js  c++  java
  • 哈希算法

    哈希算法

    什么是哈希算法

    散列函数(Hash function)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。

    哈希算法有什么特点

    确定性

    如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。

    散列碰撞(collision)

    散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同。

    不可逆性

    一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。

    同时一个哈希值对应无数个明文,理论上也不知道哪个是正确对应的。

    混淆特性

    输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值,没有规律可循。

    哈希算法有什么用

    保护资料

    加密存储在数据库的密码字符串。

    确保传递真实的信息

    消息或数据的接收者确认消息是否被篡改的性质,称为数据的真实性,也成为完整性。发信人通过将原消息和散列值一起发送,可以保证真实性。

    散列表

    散列表是散列函数的一个主要应用,使用散列表能够快速的按照关键字查找数据记录。

    错误校正

    使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。这就叫做冗余校验。

    语音识别

    对于像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数——例如MD5,但是这种方案会对时间平移、CD读取错误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感。使用一些类似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的音频文件,但是要找到全部相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了。

    有哪些哈希算法

    算法名称 输出大小(bits) 内部大小 区块大小 长度大小 字符尺寸 碰撞情形
    HAVAL 256/224/192/160/128 256 1024 64 32 Y
    MD2 128 384 128 No 8 大多数
    MD4 128 128 512 64 32 Y
    MD5 128 128 512 64 32 Y
    PANAMA 256 8736 256 N 32 Y
    RadioGatún 任意长度 58 3 N 1-64 N
    RIPEMD 128 128 512 64 32 Y
    RIPEMD-128/256 128/256 128/256 512 64 32 N
    RIPEMD-160/320 160/320 160/320 512 64 32 N
    SHA-0 160 160 512 64 32 Y
    SHA-1 160 160 512 64 32 有缺陷
    SHA-256/224 256/224 256 512 64 32 N
    SHA-512/384 512/384 512 1024 128 64 N
    Tiger(2)-192/160/128 192/160/128 192 512 64 64 N
    WHIRLPOOL 512 512 512 256 8 N

    The End
    以上摘取文献参考维基百科

  • 相关阅读:
    Leetcode 15 3Sum
    Leetcode 383 Ransom Note
    用i个点组成高度为不超过j的二叉树的数量。
    配对问题 小于10 1.3.5
    字符矩阵的旋转 镜面对称 1.2.2
    字符串统计 连续的某个字符的数量 1.1.4
    USACO twofive 没理解
    1002 All Roads Lead to Rome
    USACO 5.5.1 求矩形并的周长
    USACO 5.5.2 字符串的最小表示法
  • 原文地址:https://www.cnblogs.com/jehorn/p/13856845.html
Copyright © 2011-2022 走看看