最近在写一个web项目时,需要在数据库中将用户密码等一类信息进行加密处理。数据加密算法有许多  ,各有各的优缺点;在  http://www.cnblogs.com/yangywyangyw/archive/2012/07/31/2620861.html一文中对各种加密算法进行了介绍。之前,有对数据进行加密,由于许久没写,在加密处理上出了一些问题。找了一些博客,但没能很好解决问题。 本次项目的加密,采用的是MD5加密,MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆;所以要解密MD5没有现成的算法,只能用穷举法,把可能出现的明文,用MD5算法散列之后,把得到的散列值和原始的数据形成一个一对一的映射表,通过比在表中比破解密码的MD5算法散列值,通过匹配从映射表中找出破解密码所对应的原始明文。

第一步: 创建MD5Help类

  public static string EncryptString(string str)
{
//utf8 x2
//创建对象的方法,构造方法,静态方法
MD5 md5 = MD5.Create();
//调用MD5加密方法
//将字符串转换为字节数组
byte[] byteOld = Encoding.GetEncoding("GBK").GetBytes(str);
byte[] byteNew = md5.ComputeHash(byteOld);
//将加密结果进行 转换字符串
StringBuilder sb = new StringBuilder();
foreach (byte b in byteNew)
{
//将字符转换成16进制表示的字符串,而是占用从两头来
sb.Append(b.ToString("x2"));
}
//返回加密字符串
return sb.ToString(); }
}

第二步:对需要加密数据进行加密

例如对字符串 string str =admin"  加密;

调用方法:   Md5Helper.EncryptString(string  str)。得到返回字符串结果:21232f297a57a5a743894a0e4a801fc3,数据库存储结果: 21232f297a57a5a743894a0e4a801fc3

第三步:获取验证数据与加密数据进行对比

对验证数据,调用 Md5Helper.EncryptString(string  str) 方法.,得到加密后数据 与数据库存储数据进行对比.但需要强调的是 ,验证数据需要调用两次加密方法。

string str2 =  Md5Helper.EncryptString( Md5Helper.EncryptString(str))

最初,我一直加密一次验证数据与数据库中加密数据进行对比,结果一直通不过。通过调试程序,发现:

从数据库取出已经加密的数据为:c3284d0f94606de1fd2af172aba15bf3 。这与“admin”数据第一次加密数据不同。因此,我对数据进行两次加密,得到以下结果:

第一次加密结果为:21232f297a57a5a743894a0e4a801fc3

第二次加密结果为:c3284d0f94606de1fd2af172aba15bf3

验证数据第二次加密结果与数据库获取加密数据一致。

在解决验证数据与数据库密码的对比之后,还发现一个问题。我采用的是sql server 数据库,数据库是别人建立好后给我。由于每个人设置不同,数据库编码不同,数据库编码格式不同,需要对MD5Helper类中的代码进行改造:

//将字符串转换为字节数组

byte[] byteOld = Encoding.GetEncoding("GBK").GetBytes(str);

对于这段代码需要根据数据库的编码格式进行改造,数据编码为utf-8的需要将GetEncoding 设置为utf-8.对于如何查询 数据库的编码格式,,可以参考这篇文章

http://www.cnblogs.com/print-true/p/5765031.html   ------- - ------查询Sql Server 编码格式.

关于Sql server数据 MD5加密的更多相关文章

  1. Sql Server数据的加密与解密

    Sql Server数据的加密与解密 在sql server中,我们如何为数据进行加密与解密,避免使用者窃取机密数据? 对于一些敏感数据,如密码.卡号,一般不能使用正常数值来存储.否则会有安全隐患.以 ...

  2. SQL Server 2005 MD5函数

    原文:SQL Server 2005 MD5函数 在SQL Server 2005下自带的函数HashBytes() ,此函数是微软在SQL Server 2005中提供的,可以用来计算一个字符串的M ...

  3. [转]细说SQL Server中的加密

    简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在 ...

  4. 细说SQL Server中的加密【转】

    简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在 ...

  5. 细说SQL Server中的加密

    简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在 ...

  6. SQL Server中的加密

    参考文献: 细说SQL Server中的加密 Transparent Data Encryption (TDE) Database Encryption Key (DEK) management SQ ...

  7. (4.23)SQL Server中的加密

    转自:https://www.cnblogs.com/CareySon/archive/2012/04/01/SQL-SERVER-Encryption.html 简介 加密是指通过使用密钥或密码对数 ...

  8. SQL server数据缓存依赖

    SQL server数据缓存依赖有两种实现模式,轮询模式,通知模式. 1  轮询模式实现步骤 此模式需要SQL SERVER 7.0/2000/2005版本以上版本都支持        主要包含以下几 ...

  9. [SQL]SQL Server数据表的基础知识与增查删改

    SQL Server数据表的基础知识与增查删改 由张晨辉(学生) 于19天 前发表 | 阅读94次 一.常用数据类型 .整型:bigint.int.smallint.tinyint .小数:decim ...

随机推荐

  1. DxPackNet 4.保存音视频为本地avi文件

    捕获到了音视频后要保存到本地文件,这是很常见的应用场景,DxPackNet保存视频文件也比较简单 用 IAviStreamWriter  avi文件写入流即可 1.初始化相关设备,设定好数据捕获的回调 ...

  2. 地牢逃脱 (BFS)

    题意:给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指 ...

  3. POJ - 1860 Bellman-Ford判正环

    心累,陕西邀请赛学校不支持,可能要自费了.. 思路:套用Bellman-Ford判断负环的思路,把大于改成小于即可判定是否存在从源点能到达的正环.如果存在正环,那么完全多跑几次正环就可以把钱增加到足够 ...

  4. pycharm安装,svn使用,远程开发调试,接口测试,连接服务器

    磨刀不误砍柴工,配置完美的编辑器,在开发时,能帮助我们节约大量的时间成本,从而是我们的精力放在业务逻辑实现上面! 接下来将介绍 使用pyhcarm如何使用svn,远程开发调试,接口测试,已经连接远程服 ...

  5. kolla-ansible快速入门

    kolla-ansible快速入门 kolla-ansible是一个结构相对简单的项目,它通过一个shell脚本,根据用户的参数,选择不同的playbook和不同的参数调用ansible-playbo ...

  6. node实现jsonp跨域

    1. 搭建node server //引入模块 var http=require("http"); var fs=require("fs");var url = ...

  7. 慢慢来写SpringMVC基本项目

    首先新建一个maven项目. 这里选用webapp的.在点击next弹出的界面的groupID和artifactID自己定义憋.好了,这个第一步完成.创建完可能会有个红叉在项目上, 这个只需要在pom ...

  8. 【linux】 LINUX FTP搭建

    1.安装ftp服务 yum install vsftpd 2.编辑配置文件 vsftpd的配置文件有三个,分别是:/etc/vsftpd/vsftpd.conf/etc/vsftpd/ftpusers ...

  9. Openstack_O版(otaka)部署_网络服务Neutron部署

    控制节点配置 1. 建库建用户 CREATE DATABASE neutron; GRANT ALL PRIVILEGES ON neutron.* TO '; GRANT ALL PRIVILEGE ...

  10. Django学习-2-初识settings文件

    配置文件文档 https://docs.djangoproject.com/en/2.0/ref/    1.添加APP的设置 INSTALLED_APPS = [ 'django.contrib.a ...