zoukankan      html  css  js  c++  java
  • 对旧的用户密码系统的改造

    旧的系统密码存储的是md5(password),理论上md5在有限的时间空间内是不可逆的(实际上已经有人可以了)
    一般使用md5(password),加加密后的密码进行保存
    但这会有一个比较严重的问题,比如密码是123456的用户,存储的密码值都是e10adc3949ba59abbe56e057f20f883e
    这样就会导致,如果被暴库后,可以拿已知的字典表来直接匹配了(所有e10adc3949ba59abbe56e057f20f883e的用户密码都是123456,这不是废话么)

    一般的处理方式是加盐(salt),也就是md5(相对不变的内容+密码),这样即使密码一样,存储的内容也不一样,“相对不变的内容”一般会是用户名
    这样的话,存储的是md5(userName+password)
    这样就会好很多了,但是如果你的系统以前使用的md5(password),那么,你本身并没有存储password,要升级到这个方案,基本是不可行的。

    md5(userName+md5(password)),这样的方案就优雅些了,也加了盐,也可以从原有的系统进行平滑升级

    贴一点代码吧,

    Java代码
    1. package info.frady;   
    2.   
    3. import org.apache.commons.codec.digest.DigestUtils;   
    4. public class CommonTest {   
    5.   
    6.     public static void main(String[] args) {   
    7.         String userName="frady";   
    8.         String password="123456";   
    9.         System.out.println(DigestUtils.shaHex(password));//sha(password),很少这么干   
    10.         System.out.println(DigestUtils.md5Hex(password));//md5(password),通用的做法   
    11.         System.out.println(DigestUtils.md5Hex(userName+password));//md5(userName+password),加强的做法,加了用户名做salt   
    12.         System.out.println(DigestUtils.md5Hex(userName+DigestUtils.md5Hex(password)));//md5(userName+md5(password)),兼容旧md5(password)升级的安全做法,用用户名做salt   
    13.     }   
    14. }  
  • 相关阅读:
    如何在CentOS系统中安装字体 51CTO.COM
    C++检查输入数据类型? 知乎
    义乌市爱因宝母婴用品有限公司_公司简介
    硬盘对拷必备 AGE USB/eSATA对拷机现卖场!_青岛行情中关村在线
    Download: Microsoft SQL Server Management Studio Express Microsoft Download Center Download Details
    今晚看啥
    nano接收器
    12306订票助手 (版本 3.5.0)
    Microsoft® SQL Server® 2008 Management Studio Express
    有线键盘和鼠标确实应该退出历史舞台了
  • 原文地址:https://www.cnblogs.com/win7xt/p/3126034.html
Copyright © 2011-2022 走看看