有没有人可以给我讲一下哈希的概念和用途?密码加密?文件校验? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
traceLee
V2EX    问与答

有没有人可以给我讲一下哈希的概念和用途?密码加密?文件校验?

  •  
  •   traceLee 2015-11-08 23:52:33 +08:00 3325 次点击
    这是一个创建于 3634 天前的主题,其中的信息可能已经有所发展或是发生改变。

    个人理解,哈希是一种摘要算法,可以用于数据库密码加密,因为不同值的哈希值有可能相等,可是这样的话不会有多个密码可以登录同一个帐号吗?还有哈希还可以用来做文件校验?

    11 条回复    2015-11-09 14:07:00 +08:00
    wy315700
        1
    wy315700  
       2015-11-08 23:57:08 +08:00
    一个好的哈希算法是抗碰撞的,很难出现不同值的哈希值相等。
    RqPS6rhmP3Nyn3Tm
        2
    RqPS6rhmP3Nyn3Tm  
       2015-11-08 23:58:03 +08:00 via iPad
    不同值的 hash 如果一样说明这个算法有问题……
    文件校验很常用
    traceLee
        3
    traceLee  
    OP
       2015-11-09 00:03:35 +08:00
    @BXIA 这样说任意值的哈希值都唯一的,那么用于文件校验的原理是?
    @wy315700 抗碰撞?
    wy315700
        4
    wy315700  
       2015-11-09 00:05:04 +08:00
    @traceLee 就是两个不同的内容,哈希值很难相同

    如果文件被修改了,哈希值就会不一样
    RqPS6rhmP3Nyn3Tm
        5
    RqPS6rhmP3Nyn3Tm  
       2015-11-09 00:05:45 +08:00 via iPad
    @traceLee 一个意思, Google 一下有很多分析
    SkyEcho
        6
    SkyEcho  
       2015-11-09 01:57:17 +08:00
    比如 123456 这个数据,我给它每三个字符模 7 求余, 123%9 = 6 456%7 = 1 我就把这个数据摘要成 61 ,显然根据 61 没法推出 123456 ,数据是不可逆的。
    一般可以用在下载的文件效验,的确可能出现不同文件对应同一个 hash 值,但是会增加造假成本,改一两个数据容易,想改完数据还要匹配原来的 hash 就很麻烦。
    至于密码,一样,有可能,但穷举成本太高
    lightening
        7
    lightening  
       2015-11-09 03:22:11 +08:00   1
    @BXIA 你在说什么……任何算法中哈希值都会且一定会发生碰撞。

    @traceLee
    同一个哈希值所对应的原数据有无限多种。
    哈希是把任意数据映射到定长字符串的一种方法,原数据有无限中可能性,哈希后的值只有有限多种可能性。每个哈希值对应的元数据都可能有无限多种可能性。

    两个原值的哈希一致的情况,叫做碰撞。任何算法中,碰撞一定会发生,且每个值都有无限个哈希碰撞。但是,找到其中的一个是非常困难的,接近于不可能。一个好的哈希算法,要求寻找碰撞最便捷的方法就是穷举。曾经出现过的 MD5 被破解,意思就是,有人找到了一个比穷举更快的寻找哈希碰撞的方法。

    是的,两个文件可能出现哈希值一致的情况,但是这种概率非常非常低,以至于可以忽略不计。

    密码登录也是,由于系统只记录哈希值,所以有无限多个密码可以用来登录,但是找到其中任意一个的可能性实在太低了,以至于忽略不计。
    WalkingEraser
        8
    WalkingEraser  
       2015-11-09 03:26:55 +08:00
    哈希值是肯定会有碰撞的,但理想应该是均匀分布的。衡量哈希算法的安全性,需要满足单向性、弱抗碰撞性、强抗碰撞性、伪随机性等。满足这些特性就只能靠穷举攻击了。可用于消息认证、数字签名、单向加密等咯
    RqPS6rhmP3Nyn3Tm
        9
    RqPS6rhmP3Nyn3Tm  
       2015-11-09 10:06:21 +08:00 via iPad
    @lightening 这个的确是这样,不过容易发生碰撞的 hash 算法是肯定不能用的。我指的是正常使用的情况,应该没有说错。如同 sha512 和 md5 之间发生问题的概率差很多
    traceLee
        10
    traceLee  
    OP
       2015-11-09 12:55:19 +08:00
    @lightening 讲得很清楚,谢谢,还想问一下为什么说 php 源码里面用到 hash 表?
    haozhang
        11
    haozhang  
       2015-11-09 14:07:00 +08:00
    @traceLee hash 表是一个将 hash 值作为 key ,用来映射 value 的集合。如果你想要算密码的 hansh 值的话: MD 系列、 SHA 系列就可以了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1210 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 17:41 PVG 01:41/a> LAX 10:41 JFK 13:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86