zoukankan      html  css  js  c++  java
  • 用户密码安全存储解决方案

    解决方案:采用MD5 不可逆哈希算法,对用户密码运算后再加随机码的加密方式进行数据库密码存储,避免类似CSDN、天涯网等数据库泄密事件。切忌数据库密码明文存储!!!

    1、定义获取Md5字符串的方法

     1 /// <summary>
     2         /// 根据字符串获取MD5值
     3         /// </summary>
     4         /// <param name="str">要转换的字符串</param>
     5         /// <returns>MD5字符串</returns>
     6         public static string GetMD5(string str)
     7         {
     8             byte[] bytes = System.Text.Encoding.Default.GetBytes(str);
     9             MD5 md5 = MD5.Create();
    10             byte[] resultBytes = md5.ComputeHash(bytes);
    11 
    12             string md5Result = "";
    13             for (int i = 0; i < resultBytes.Length; i++)
    14             {
    15                 md5Result += resultBytes[i].ToString("X2");
    16             }
    17             return md5Result;
    18         }

    2、定义加密方法

     1  /// <summary>
     2         /// 获取加密后的密码,用于数据库中存放
     3         /// </summary>
     4         /// <param name="txtPwd">用户输入的密码</param>
     5         /// <returns>加密后的密码</returns>
     6         public static string GetEncMD5(string txtPwd)
     7         {
     8             string strRandom;
     9 
    10             //获取3位随机字母
    11             Random r = new Random();
    12             strRandom = ((char)(r.Next(65, 65 + 26))).ToString() + ((char)(r.Next(65, 65 + 26))).ToString() + ((char)(r.Next(65, 65 + 26))).ToString();
    13 
    14             return strRandom + GetMD5(strRandom + txtPwd);//设定加密方式,也可以在此进行多次Md5加强密码安全度
    15         }


    3、定义验证方法

     1 /// <summary>
     2         /// 判断密码是否正确
     3         /// </summary>
     4         /// <param name="sqlPwd">数据库中存放的密码</param>
     5         /// <param name="txtPwd">用户输入的密码</param>
     6         /// <returns>正确返回true</returns>
     7         public static bool PwdIsRight(string sqlPwd, string txtPwd)
     8         {
     9             string str = sqlPwd.Substring(0, 3);
    10             string tmp = str + GetMD5(str + txtPwd);
    11             return sqlPwd == tmp ? true : false;
    12         }

    通过这种加密方式,数据库中存放的用户密码就一组大于32位的字符串,并确保了即使用户密码相同但数据库存入的密码字符串也是不相同的,有效解决了反Md5穷举法。

  • 相关阅读:
    LNMP安装后MYSQL数据库无法远程访问解决
    Ubuntu忘记root密码怎么办?
    composer安装出现proc_open没有开启问题的解决方案
    LNMP搭建环境遇到的N多坑
    lnmp HTTP ERROR 500
    LNMP集成运行(开发)环境的部署
    最新javamail 使用方案,可以异步发送邮件
    vi常用快捷键
    Dom4j解析XML文件
    Multiple markers at this line @Override的解决方法
  • 原文地址:https://www.cnblogs.com/rdst/p/other.html
Copyright © 2011-2022 走看看