数据库中存储用户名、密码时如何处理?
一般的项目都有一个用户表,请问在这个表中,你的账号和密码都是明文存储的么?那么怎么防止被别人看见用户的密码呢?
我见过一个项目是这样的,在用户注册时就对用户的密码进行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;}}
数据库中存储用户名、密码时如何处理?相关推荐
- mysql经度纬度类型_在MySQL数据库中存储纬度/经度时使用的理想数据类型是什么?...
Gajus.. 41 取决于您需要的精度. Datatype Bytes resolution ------------------ ----- --------------------------- ...
- 在SQL数据库中存储纬度和经度数据时要使用的数据类型是什么? [重复]
本文翻译自:What datatype to use when storing latitude and longitude data in SQL databases? [duplicate] Th ...
- 数据库中存储大量图片设计
数据库中存储大量图片设计 1. 图像的存储策略 在数据库的开发过程中,经常需要在数据库中存储一些备注信息,而这些备注信息的内容一般较大,格式多样-如有可能是语音文件.视频文件.图片文件.文本文件等,怎 ...
- python获取数据库用户名密码_在数据库中存储用户和密码
我正在创建一个用户+密码的软件.认证后,用户可以访问一些半公共服务,但也可以加密一些只有用户才能访问的文件.在 用户必须按原样存储,如有可能,无需修改.在auth之后,只要软件还在运行,用户和密码都会 ...
- android在哪存储当前用户名和密码,Android实战教程第七篇之如何在内存中存储用户名和密码...
本文实例为大家分享了Android内存中存储用户名和密码的方法,供大家参考,具体内容如下 首先是配置文件: xmlns:tools="http://schemas.android.com/t ...
- 给Double赋值为0.0时,数据库中存储为null
此分值字段为Double类型,给他赋值0.0后,数据库中依旧为null xml中的sql语句为这样. 解决方法 将sql语句修改为 即可 数据库中存储为
- 性别字段在数据库中存储数字,查询时,如何查询出数字对应的男和女?(case when的应用)
今天敲代码的时候,刚好遇到这个问题,写博客记一下. 情况如下:性别字段在数据库中存储的是数字,男对应1,女对应0.然后,查询的时候,我想查询出男和女两个字,而不是1和0. 一开始,我写的sql语句,是 ...
- oracle表重命名 索引,CSS_在Oracle数据库中按用户名重建索引的方法,如果你管理的Oracle数据库下某 - phpStudy...
在Oracle数据库中按用户名重建索引的方法 如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大 ...
- md5加密数据表中的密码php,JSP_使用MD5加密数据库中的用户密码(一),我们知道,现在网络上一般的 - phpStudy...
使用MD5加密数据库中的用户密码(一) 我们知道,现在网络上一般的网站,稍微完善一点的,往往都需要用户先注册,提供诸如电子邮件.账号.密码等信息以后,成为网站栏目的注册用户,才可以享受网站一些特殊栏目 ...
最新文章
- Linux内核之内存管理(4)--缺页处理程序
- 2019年上半年收集到的人工智能大神与大咖观点文章
- 新疆大学计算机考研难吗,新疆大学考研难吗?一般要什么水平才可以进入?
- oracle 增加ora容量_Oracle的10046事件详解
- DW1000 TX POWER (发射功率) 解析
- 每个开发人员现在应该下载的十种必备工具
- 超简单的JNI——NDK开发教程
- 7种常用p2p共享协议
- 其它数据类型和Json的转化
- 上传 jar 包到 nexus3、上传本地 jar 包到 maven 私服
- tomcat的php文件上传大小限制,PHP上传文件大小限制的调整 Nginx 413 Request Entity Too Large...
- EntityFramework codefirst
- Excel中RATE函数的Java实现欢迎加入我的星球
- gentoo mysql_gentoo
- Shader混合模式--正片叠底、滤色、叠加
- 中国电信广东DNS服务器
- CSS3 图片旋转特效
- lua生成指定大小的随机字符串
- 王者荣耀注销服务器的流程,王者荣耀账号怎么永久注销 王者荣耀注销账号流程介绍...
- 《计算机网络——自顶向下方法》学习笔记——应用层