• [转]SQL Server 数据库中的 MD5 和 SHA1


    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

    来源:http://blog.chinaunix.net/uid-10697776-id-2935575.html

  • 相关阅读:
    目标检测算法原理
    物体检测项目
    Bootstrap+Font Awesome图标不显示 或显示错误解决办法
    关于 微信发送被动回复音乐消息 用户接收不到的问题
    多线程操作SQLite注意事项
    SQLiteDatabase中query、insert、update、delete方法参数说明
    Android开发:使用Fragment改造TabActivity
    UDP广播与多播
    Android 布局文件 属性区别
    Android开发
  • 原文地址:https://www.cnblogs.com/seasons1987/p/3309300.html
Copyright © 2020-2023  润新知