SQL Server 数据库中的 MD5 和 SHA1

原创 2007年10月08日 15:09:00
MD5 和 SHA1 是一种单向加密算法,常用于密码的验证等需要加密操作的场合,在一般情况下,开发人员可以通过 Delphi 或 PHP 这类语言自己编写相关函数或者使用自带的函数,然后将加密过的结果根据需要存储到数据库中。

但在某些情况下,可能需要在数据库端计算 MD5 和 SHA1 哈希值,比如说在存储过程或自定义函数内部。开源数据库 MySQL  就提供类似这样的内置函数,以下语句就可以分别显示字符串  “12345” 的 MD5 和 SHA1 值,返回结果为字符串型:

select md5(’12345′);
select sha1(’12345′);

但 SQL Server  中没有直接提供类似这样的函数。在 SQL Server 2000 中,如果需要加密可以使用未文档化的  pwdencrypt() pwdcompare() 函数来加密数据和比较结果,加密方式是微软自己的算法,随着 SQL Server 版本的升级,函数的加密结果可能也会有所不同。

不过在 SQL Server 2005 中,微软提供了一个函数 hashbytes() 可以用来计算一个字符串的 MD5 和 SHA1 值,以下语句分别获得字符串 “12345” 的 MD5 和 SHA1:

select hashbytes(’MD5′, ‘12345′) ;
select hashbytes(’SHA1′, ‘12345′) ;

hashbytes() 函数的返回结果是 varbinary 型,也就是以 0x 开头 16 进制形式的二进制数据,不过通常情况下,我们需要的都是字符串型的数据,很多人首先想到的可能就是用 CAST 或 Convert 函数将varbinary 转换为 varchar,但这样转换后的结果会是乱码,正确转换 varbinary 可变长度二进制型数据到 16 进制字符串应该使用系统内置函数 sys.fn_VarBinToHexStr(),如下所示:

select sys.fn_VarBinToHexStr(hashbytes(’MD5′, ‘12345′))

sys.fn_varBinToHexStr() 函数只在 SQL Server 2005 中有效,在 SQL Server 2000 中实现相同功能使用系统扩展存储过程:master..xp_varBinToHexStr

 

Sql Server MD5和SHA1 加密

注意: hashbytes()返回varbinary类型值;  sys.fn_VarBinToHexStr()是把varbinary转换成varchar;   在SQl2005下自带的函数ha...
  • chenghaibing2008
  • chenghaibing2008
  • 2013年03月28日 15:46
  • 5008

SQL Server与MySQL中的MD5与SHA1

SQL Server 2008: select UPPER(replace(sys.fn_varbintohexstr(hashbytes('SHA1', '12345')), '0x', ''...
  • z69183787
  • z69183787
  • 2017年01月12日 12:05
  • 530

sql server 内置MD5加密函数

如何在sql server中实现自动加密,sql server 提供内置函数HashBytes。 首先,我们在数据库中执行 select HashBytes('MD5','12345678') ...
  • rookie_liu_ToFly
  • rookie_liu_ToFly
  • 2016年11月10日 18:11
  • 2933

各种加密解密函数(URL加密解密、sha1加密解密、des加密解密)

总结加密解密函数 /** * 加密 * @param string $string 要加密或解密的字符串 * @param string $operation 加...
  • e421083458
  • e421083458
  • 2014年03月24日 16:44
  • 20392

MD5和SHA1算法的C++实现和使用

MD5算法: MD5.H #ifndef MD5_H #define MD5_H typedef struct { unsigned int count[2]; unsigned in...
  • csdn49532
  • csdn49532
  • 2016年02月18日 11:16
  • 4155

PHP数据加密技术之一---MD5()和Sha1()加密

PHP数据加密技术 Md5()加密算法是单向的,不存在逆向函数得到原来的明文数据 算法调用: string md5 ( string $str [, bool $raw_output = false ...
  • qq_18661257
  • qq_18661257
  • 2016年03月07日 20:33
  • 7106

SQL SERVER 2000数据库 MD5 32位加密 支持中文、数字、字母

从网上抄过来的   /***************************************************************************** * Name: ...
  • liangzhonglin
  • liangzhonglin
  • 2012年10月24日 12:18
  • 1399

Windows Server 2008 R2 64位 CHS 下载 (提供:MD5、SHA-1 权威效验值)(转远景)

— 前言 —       发现不止远景一个论坛无限制的发 Windows Server 2008 R2 下载,而且大家最关心的则是正版(MSDN),所以自己开贴,分享一下资源非常健康(下载速度几乎达...
  • sustwct
  • sustwct
  • 2012年08月18日 09:45
  • 4302

前后端演示SHA1,MD5加密登录(带数据库)

SHA1,MD5简介安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digit...
  • j_bleach
  • j_bleach
  • 2017年07月02日 16:43
  • 361

Java用字符串生成的md5,sha1作为数据库主键, 去重

用处: 长字符串存数据库时, 计算其md5值作为主键, 可以用来去重 MD5 - 是一种无法解密的加密算法, 因为它本来就不是用来传输数据的, 它仅仅用来生成”摘要” - 对任何字符串都可以加密成一段...
  • caib1109
  • caib1109
  • 2016年06月01日 21:01
  • 894
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 数据库中的 MD5 和 SHA1
举报原因:
原因补充:

(最多只允许输入30个字)