一般的项目都有一个用户表,请问在这个表中,你的账号和密码都是明文存储的么?那么怎么防止被别人看见用户的密码呢?

我见过一个项目是这样的,在用户注册时就对用户的密码进行MD5加密,这样用户表中存储的密码就是加密的信息,就算管理员也不能看到用户的密码,用户在登录时输入账号和密码,在后台把用户密码惊醒MD5摘要之后和数据库的密码就行比对,如果一致就可以登陆,但是用户忘记密码之后就没有任何人能看到密码了,只能根据用户的提示问题重新设置。

确切的说,数据库中存储的不是”加密“后的密码,而是密码的摘要信息,通过这个摘要信息是无法还原出密码的。用户登录时拿到原密码之后,按照相同的算法,再计算一遍摘要信息,和数据库中的摘要信息做一下比较,如果相同,就认为密码是正确的。

登录时,我们填写的是明文密码,但在数据库里存储的是加密后的密码,登录时这两者如何比对?

用相同的加密算法再次加密你的明文密码,然后比对数据库中的密文。相同就表示密码正确。当然这个其中可能会牵涉到碰撞等问题,但是基本可以不考虑。

可以参考下这个:/// <summary>/// 对密码进行MD5加密的函数(添加盐值:&%#@?,:*/// </summary>/// <param name="Password"></param>/// <returns></returns>public static string getEncryPassword(string Password){string EncryedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(Password + "&%#@?$%)@%($)#_$)*", "md5"); // Or "sha1" return EncryedPassword;}/// <summary>/// 加密/// </summary>/// <param name="strText"></param>/// <returns></returns>public static string EncryptText(String strText){return Encrypt(strText, "&%#@?$%)@%($)#_$)*");// return Encrypt(strText,DateTime.Now.ToString() );}/// <summary>/// 解密/// </summary>/// <param name="strText"></param>/// <returns></returns>public static String DecryptText(String strText){return Decrypt(strText, "&%#@?$%)@%($)#_$)*");// return Decrypt(strText,DateTime.Now.ToString());}/// <summary>/// 加密函数/// </summary>/// <param name="strText"></param>/// <param name="strEncrKey"></param>/// <returns></returns>public static String Encrypt(String strText, String strEncrKey){Byte[] byKey = { };Byte[] IV = { 0x01, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };try{byKey = System.Text.Encoding.UTF8.GetBytes(strEncrKey.Substring(0, 8));DESCryptoServiceProvider des = new DESCryptoServiceProvider();Byte[] inputByteArray = Encoding.UTF8.GetBytes(strText);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();return Convert.ToBase64String(ms.ToArray());}catch (Exception ex){return ex.Message;}}/// <summary>/// 解密函数/// </summary>/// <param name="strText"></param>/// <param name="sDecrKey"></param>/// <returns></returns>public static String Decrypt(String strText, String sDecrKey){char[] stBase = strText.ToCharArray();for (int i = 0; i < stBase.Length; i++){if (stBase[i] == ' '){stBase[i] = '+';}}strText = "";for (int i = 0; i < stBase.Length; i++){strText += stBase[i];}Byte[] byKey = { };Byte[] IV = { 0x01, 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };Byte[] inputByteArray = new byte[strText.Length];try{byKey = System.Text.Encoding.UTF8.GetBytes(sDecrKey.Substring(0, 8));DESCryptoServiceProvider des = new DESCryptoServiceProvider();inputByteArray = Convert.FromBase64String(strText);MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);cs.Write(inputByteArray, 0, inputByteArray.Length);cs.FlushFinalBlock();System.Text.Encoding encoding = System.Text.Encoding.UTF8;return encoding.GetString(ms.ToArray());}catch (Exception ex){return ex.Message;}}

数据库中存储用户名、密码时如何处理?相关推荐

  1. mysql经度纬度类型_在MySQL数据库中存储纬度/经度时使用的理想数据类型是什么?...

    Gajus.. 41 取决于您需要的精度. Datatype Bytes resolution ------------------ ----- --------------------------- ...

  2. 在SQL数据库中存储纬度和经度数据时要使用的数据类型是什么? [重复]

    本文翻译自:What datatype to use when storing latitude and longitude data in SQL databases? [duplicate] Th ...

  3. 数据库中存储大量图片设计

    数据库中存储大量图片设计 1. 图像的存储策略 在数据库的开发过程中,经常需要在数据库中存储一些备注信息,而这些备注信息的内容一般较大,格式多样-如有可能是语音文件.视频文件.图片文件.文本文件等,怎 ...

  4. python获取数据库用户名密码_在数据库中存储用户和密码

    我正在创建一个用户+密码的软件.认证后,用户可以访问一些半公共服务,但也可以加密一些只有用户才能访问的文件.在 用户必须按原样存储,如有可能,无需修改.在auth之后,只要软件还在运行,用户和密码都会 ...

  5. android在哪存储当前用户名和密码,Android实战教程第七篇之如何在内存中存储用户名和密码...

    本文实例为大家分享了Android内存中存储用户名和密码的方法,供大家参考,具体内容如下 首先是配置文件: xmlns:tools="http://schemas.android.com/t ...

  6. 给Double赋值为0.0时,数据库中存储为null

    此分值字段为Double类型,给他赋值0.0后,数据库中依旧为null xml中的sql语句为这样. 解决方法 将sql语句修改为 即可 数据库中存储为

  7. 性别字段在数据库中存储数字,查询时,如何查询出数字对应的男和女?(case when的应用)

    今天敲代码的时候,刚好遇到这个问题,写博客记一下. 情况如下:性别字段在数据库中存储的是数字,男对应1,女对应0.然后,查询的时候,我想查询出男和女两个字,而不是1和0. 一开始,我写的sql语句,是 ...

  8. oracle表重命名 索引,CSS_在Oracle数据库中按用户名重建索引的方法,如果你管理的Oracle数据库下某 - phpStudy...

    在Oracle数据库中按用户名重建索引的方法 如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大 ...

  9. md5加密数据表中的密码php,JSP_使用MD5加密数据库中的用户密码(一),我们知道,现在网络上一般的 - phpStudy...

    使用MD5加密数据库中的用户密码(一) 我们知道,现在网络上一般的网站,稍微完善一点的,往往都需要用户先注册,提供诸如电子邮件.账号.密码等信息以后,成为网站栏目的注册用户,才可以享受网站一些特殊栏目 ...

最新文章

  1. Linux内核之内存管理(4)--缺页处理程序
  2. 2019年上半年收集到的人工智能大神与大咖观点文章
  3. 新疆大学计算机考研难吗,新疆大学考研难吗?一般要什么水平才可以进入?
  4. oracle 增加ora容量_Oracle的10046事件详解
  5. DW1000 TX POWER (发射功率) 解析
  6. 每个开发人员现在应该下载的十种必备工具
  7. 超简单的JNI——NDK开发教程
  8. 7种常用p2p共享协议
  9. 其它数据类型和Json的转化
  10. 上传 jar 包到 nexus3、上传本地 jar 包到 maven 私服
  11. tomcat的php文件上传大小限制,PHP上传文件大小限制的调整 Nginx 413 Request Entity Too Large...
  12. EntityFramework codefirst
  13. Excel中RATE函数的Java实现欢迎加入我的星球
  14. gentoo mysql_gentoo
  15. Shader混合模式--正片叠底、滤色、叠加
  16. 中国电信广东DNS服务器
  17. CSS3 图片旋转特效
  18. lua生成指定大小的随机字符串
  19. 王者荣耀注销服务器的流程,王者荣耀账号怎么永久注销 王者荣耀注销账号流程介绍...
  20. 《计算机网络——自顶向下方法》学习笔记——应用层

热门文章

  1. zed相机拆机_TX1入门教程硬件篇-外接双目相机ZED
  2. 您无法登录,因为您使用的登录方法......
  3. 几个连接虚拟机和云服务器的软件
  4. QA是干什么的?(职责所在????)
  5. 魅族20pro参数配置 魅族20pro值得买吗
  6. win7计算机电源设置在哪里设置,Win7系统如何设置电源选项
  7. TDM阅读笔记,在推荐系统的应用
  8. 凉开水泡绿茶有利降血糖
  9. 腾讯云图地图使用介绍
  10. android改微信号码,安卓版微信更新,已支持修改微信号