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
    以上摘取文献参考维基百科

  • 相关阅读:
    NSLocalizedString用法
    4-27学习心得
    手势学习
    plist处理
    数据存储
    initWithFrame方法
    控制器跳转小常识
    UIGestureRecognizer学习笔记
    博客资源
    检测手机wifi有没有打开
  • 原文地址:https://www.cnblogs.com/jimmyguu/p/13856845.html
Copyright © 2011-2022 走看看