zoukankan      html  css  js  c++  java
  • md5不安全!那如何保护密码?

    密码的安全等级

    一、level0 ---- 明文:不加密

    username

    password

    tom 123456

    二、level1 ---- 摘要式身份验证

    验证流程:
    - 1、 提交用户名密码
    - 2、计算密码哈希值
    - 3、比对存储的哈希值和计算出的哈希值是否相等
    相同:登陆成功
    不同:登陆失败
    使用哈希算法(可以是md5, sha1, sha256,sha512 结果长度依次增长):

    哈希算法缺点:

    1、容易遭受彩虹表(rainbow table, 如下)攻击!通过把大量的哈希值和原密码存储的组合存储在表中。达到用得到的hash值反向查询原密码。
    2、另外一个缺点是可以看到谁有相同的密码
    3、md5作为密码已经十分不安全,现在网上有很多网站可以通过出入md5 的哈希码来查询对应的明文(通过彩虹表实现)。
    hash_value original_password
    ba3253876aed6b… 123456
    c70b5dd9ebfb6f… abc123
    b109f3bbbc244e… password

    三、Level2 ---- 哈希+salt

    salt可以简单的理解成:随机产生的一定长度的,可以和密码相结合,从而使hash算法产生不同结果的字符串。

    优点:这种方法会极大防止受到彩虹表的攻击,因为即便攻击者构造出彩虹表,因为你使用了 hash(密码+ salt),
              攻击者彩虹表里的哈希值(hash(密码))和你数据库中的哈希值是不同的。 
     
    缺点: 如果攻击者知道了salt和你的哈希值,就可以计算出你的原始密码(当然也没有那么容易)
     

    四、level3 ---- 增加计算的时间 (哈希 + salt + Iteration)

    通过迭代计算的方式增加计算密码的成本。迭代的周期控制在用户可以接受范围内,这样攻击者的计算和时间成本就会大大增加。

    一般的应用应用做到LEVEL3就可以了,如果需要更加安全的方式请看下文

    五、level4 ---- 加密哈希后的密码

    通过迭代计算的方式增加计算密码的成本。迭代的周期控制在用户可以接受范围内,这样攻击者的计算和时间成本就会大大增加。

    一般的应用应用做到LEVEL3就可以了,如果需要更加安全的方式请看下文

    - 定时更换密钥(准备一组密钥定时更换,首先通过密钥解密加密存储的密码得到 bscript计算出的hash值,再用新的密钥进行加密) 

    - 密钥存储在在不同的数据源 
    (通过将密钥存储在不同的数据源的方法,进一步增加了破解难度,因为需要同时获得用户密码表数据,同时要获得其他数据源存储的密钥)
     

    六、level5 ---- 在Level4的基础上,将密码分成若干个块,分发到不同的数据库

    转发

  • 相关阅读:
    移动端重构系列-移动端html页面优化
    response项目的各个写法
    收藏功能的写法
    浅谈文本溢出省略号代表修剪text-overflow
    几种display:table-cell的应用
    -webkit-transform:scale(1.04)放大缩小效果
    自学Python5.6-面向对象三大基本特征_多态
    自学Python5.5-面向对象三大基本特征_继承
    自学Python6.5-内置模块(re、collections )
    CISCO SMARTnet服务和SMB服务技术支持
  • 原文地址:https://www.cnblogs.com/luoluo1619/p/13926925.html
Copyright © 2011-2022 走看看