md5数据库:使用MD5加密数据库中的用户密码

我们知道现在网络上网站WebSite稍微完善往往都需要用户先注册提供诸如电子邮件、账号、密码等信息以后成为网站WebSite栏目注册用户才可以享受网站WebSite些特殊栏目提供信息或者服务比如免费电子邮件、论坛、聊天等都需要用户注册而对于电子商务网站WebSite比如igo5等大型电子商务网站WebSite用户需要购买商品定需要详细而准确注册而这些信息往往是用户很隐秘信息比如电话、电子邮件、地址等所以注册信息对于用户和网站WebSite都是很重要资源不能随意透露更加不能存在安全上隐患

如果我们也设计个需要用户注册网站WebSite根据现在常用技术实现思路方法可以在数据库中建立个用于存放用户信息这个表中至少包括用户账号字段:UserAccount和用户密码字段:Password当然实际应用中个用户信息表不可能就只有这些信息往往根据网站WebSite服务要求会适当增加些其他信息以方便网站WebSite提供更加完善服务个用户信息占用这个用户信息表行也就是个数据记录当用户登录或者提交资料时候将用户填写信息和表中信息对照如果用户账号和密码都准确无误那么介绍说明这个用户是合法用户通过注册;反的则是非法用户不许通过

然而是不是这样就安全了了?是不是这样就能满足网站WebSite注册要求了呢?仔细想想我们般将用户资料直接保存在数据库中并没有进行任何保密措施对于些文件型数据库比如Access等如果有人得到这个文件岂不是所有资料都泄露无疑?更加重要如果个不负责任网管不需要任何技术手段就可以查看网站WebSite中任何资料如果我们用户信息在数据库中没有加密对于网管而言查看这些信息是太简单了所以为了增加安全性我们有必要对数据库中资料进行加密这样即使有人得到了整个数据库如果没有解密算法样不能查看到数据库中用户信息但是在考虑数据库是否安全的前我们有必要对我们数据是否真那么重要进行考虑如果数据只是简单些文件资料没有保密必要显然没有必要对这些数据进行加密而浪费系统资源、加重负担如果这些数据具有隐私性当然就有必要进行加密所以在考虑加密以前我们可以对需要加密数据做适当选择以免浪费系统资源


MD5加密算法简单介绍

在现阶段我们般认为存在两种加密方式单向加密和双向加密双向加密是加密算法中最常用它将我们可以直接理解明文数据加密为我们不可直接理解密文数据然后在需要时候可以使用算法将这些加密以后密文解密为原来可以理解明文双向加密适合于隐秘通讯比如我们在网上购物时候需要向网站WebSite提交信用卡密码我们当然不希望我们数据直接在网上明文传送这样很可能被别用户“偷听”我们希望我们信用卡密码是通过加密以后再在网络传送这样网站WebSite接受到我们数据以后通过解密算法就可以得到准确信用卡账号

单向加密刚好相反只能对数据进行加密也就是说没有办法对加密以后数据进行解密可能我们立即就会想这样加密有什么用处?不能解密加密算法有什么作用呢?在实际中个应用就是数据库中用户信息加密当用户创建个新账号或者密码信息不是直接保存到数据库而是经过次加密以后再保存这样即使这些信息被泄露也不能立即理解这些信息真正含义

MD5就是采用单向加密加密算法对于MD5而言有两个特性是很重要是任意两段明文数据加密以后密文不能是相同;第 2是任意段明文数据经过加密以后其结果必须永远是不变前者意思是不可能有任意两段明文加密以后得到相同密文后者意思是如果我们加密特定数据得到密文定是相同

MD5CyptoServiceProvider类是.NET中.Security.Cryptography名字空间个类提供专门用于MD5单向数据加密解决思路方法也是本文中我们用来加密数据库中密码在真正进行数据加密的前我们首先来了解MD5CyptoServiceProvider类中主要思路方法:ComputeHash它将输入明文数据使用MD5加密以后输出加密后密文数据现在我们就来看个具体例子:

'要加密明文

Dim strPlainText as String = "Encrypt me!"


'用于存放明文

Dim hashedDataBytes as Byte


Dim encoder as New UTF8Encoding


'建立MD5CryptoService例子

Dim md5Hasher as New MD5CryptoServiceProvider


'加密运算

hashedDataBytes = md5Hasher.ComputeHash(encoder.GetBytes(strPlainText))


看完以上具体例子以后我们知道ComputeHash思路方法只能接受作为加密对象输出密文也是因此在对串加密的前我们必须首先将这些串转化为这就要用到UTF8Encoding类GetBytes思路方法串转化为而加密以后结果也是使用输出

以上我们大致了解了MD5具体加密实现思路方法下面我们结合数据库来看看MD5实际使用


使用MD5存储密码

在前面介绍中我们提到网站WebSite往往将用户账号、密码等信息使用非加密方式保存到数据库比如账号使用类型为VarCharUserCount字段同样密码也是采用类型为VarCharPassword字段但是如果我们打算采用MD5加密方式存储密码信息就必须改变密码字段PassWord类型为16为 2进制方式这个其实我们也不难理解在前面介绍中我们知道加密以后输出是使用 2进制所以这里必须做相应改变

当用户注册成功正式建立个账号时候数据库中就必须为这个用户增加条记录以下代码实现了建立个账号功能在页面中要求用户输入账号、密码等信息然后将这些信息作为账号信息存入名为UserCount数据表在这个表中用户密码是使用MD5加密保存下面就是实现以上页面具体代码:


建立个账号

用户名:

密码:
OnClick="CreateAccount" />

在以上实现页面中“用户名”和“密码”输入框要求用户输入自己账号和密码用户输入自己信息以后按“建立用户账号”按钮就可以建立个账号并且存入数据库我们同时需要特别注意以上使用到了MD5加密和数据库等功能所以在代码最开头我们引入了几个稍微特别名字空间这是不可缺少
我们可以看到PassWord字段信息是 2进制方式保存即使数据库被人取得也不可能知道密码具体是什么意思当然密码也就不会泄露


使用MD5鉴别是否合法用户

  
既然用户密码是按照MD5加密以后保存在数据库中我们知道MD5是单次加密算法所以不可能将加密以后信息转为明文也就是说已经没有办法知道这就出现个问题如果用户使用账号、密码登录如何知道用户提供密码是否准确呢?

这就不得不提到我们前文说到MD5特征我们知道任意段明文数据经过加密以后其结果必须永远是不变也就是说如果需要验证用户密码是否正确只需要将用户当前提供密码使用MD5加密然后和数据库中保存密码字段比较就可以了以下代码就可以实现这个功能:
Login

用户账号:

密码:

使用加密方式保存密码到数据库限制

在决定是否使用加密方式保存密码以前我们还需要考虑些问题MD5是单次加密算法加密以后信息不可以解密所以如果用户丢失密码任何人都很难找到用户原来密码这时候网站WebSite也就相应失去个很重要功能那就是用户提供其他信息来取得忘记密码功能这不能不说是网站WebSite个大缺陷另外采用这样加密方式必须完全修改以前用户资料要求用户完全重新注册这也是这种思路方法比较困难个地方


整理总结

以上我们详细介绍了MD5加密用户密码实现思路方法同时也介绍了采用加密密码方式以后用户鉴别实现并讨论了使用这种加密方式应用限制在实际应用中我们可以将次思路方法做适当修改和补充以更加适合我们应用需要



  • 篇文章: 看着你秘密眼----网络嗅探技术介绍

  • 篇文章: 特洛伊木马大揭密
  • Tags:  md5加密算法 javamd5加密 md5加密 md5数据库

    延伸阅读

    最新评论

    发表评论