• 【算法】哈希算法


      先举个例子。我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志。也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的人很多,身份证也可以伪造。最可靠的办法是把一个人的所有基因序列记录下来用来代表这个人,但显然,这样做并不实际。而指纹看上去是一种不错的选择,虽然一些专业组织仍然可以模拟某个人的指纹,但这种代价实在太高了。
      而对于在互联网世界里传送的文件来说,如何标志一个文件的身份同样重要。比如说我们下载一个文件,文件的下载过程中会经过很多网络服务器、路由器的中转,如何保证这个文件就是我们所需要的呢?我们不可能去一一检测这个文件的每个字节,也不能简单地利用文件名、文件大小这些极容易伪装的信息,这时候,我们就需要一种指纹一样的标志来检查文件的可靠性,这种指纹就是我们现在所用的Hash算法(也叫散列算法)。
      散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。

    通俗的讲,哈希,就是将一段数据(无论长还是短)转成相对较短的一段数据,例如一个字符串,一个整数,亦或是一个文件。

    而这种实现,是通过使用单向哈希函数来完成的。“单向” 意味着逆转它是困难的,或者实际上是不可能的。

    用户注册的过程通常是这样的:

    • 用户填写注册表单,包括密码这一项

    • web 脚本将所有的信息存储在数据库中

    • 然而,密码在存储之前需要通过 hash 函数进行转化

    • 最原始版本的密码并没有保存在任何地方,因此从技术上讲它消失了

    用户登录的过程:

    • 用户输入用户名和密码

    • 脚本用同样的 hash 函数来转化密码

    • 脚本找到记录在数据库中的用户信息,读取保存 hash 之后的密码

    • 比较两者的值,如果匹配了就完成了登录

     

    常用的hash算法有以下几种:

    MD系列,SHA系列,MAC系列算法;

     

    (1)MD5,全名Message Digest Algorithm 5,中文名为消息摘要算法第五版,是一种散列算法,而不是通常意义上的加密算法;主要是将文本等信息转换称简短的信息摘要,是不可逆的;

    利用MD5生成的哈希值是128位的二进制数,也就是32位的16进制数;

    (2) SHA算法分为很多版本,最大的版本是SHA-1, SHA-2,SHA-2又包含了很多子版本,比如SHA-256, SHA-384, SHA-512等;

    (3)MAC算法结合了MD5和SHA算法的优势,并加入密钥的支持,是一种更为安全的消息摘要算法;

    SHA虽然和MD5一样,同属于散列算法,都是由MD4算法演变而来,但有少许的不同;

    1. 摘要长度不同:MD5的摘要的长度是128位,SHA-1的摘要长度是160位,多出了32位,而这也意味着不同明文的碰撞几率降低了2的32次方倍,而其他的SHA版本,如SHA-256,则摘要长度是256位;

    2. 性能略有差异:理论上来说,SHA-1生成摘要的性能要比MD5低一点;

    其中,Java中MD5和SHA系列的代码均在java.security包下有相应的实现;

    参考自:http://mp.weixin.qq.com/s?__biz=MzA5ODUzOTA0OQ==&mid=2651688220&idx=1&sn=a3f9cb1e186ffe22d9825bca00e85c76&chksm=8b692e5abc1ea74ce61a819f5666dd7d73ee45d6145c92b993de271a315d4f3d3fb3874f9be3&mpshare=1&scene=23&srcid=0414EOLCuLSu17uo8Aw8refB#rd

    http://www.jianshu.com/p/bf1d7eee28d0

  • 相关阅读:
    asp.net中控件的enableviewstate属性 的设置
    一个怎样得到treeView值的小例子
    实现表格边框的样式表
    GridView的精妙使用
    无法向会话状态服务器发出会话状态请求。
    Microsoft Visual Studio 2008 快捷键大全
    我每天学习一句英语今天要学的是
    C语言学习心得
    怎么样把GridView里的数据导出到Excel里
    怎么样在c#程序中放音乐
  • 原文地址:https://www.cnblogs.com/xiaozhang2014/p/7678917.html
Copyright © 2020-2023  润新知