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

转载于:https://www.cnblogs.com/martian6125/archive/2008/05/06/9631439.html

SQL Server 数据库中的 MD5 和 SHA1相关推荐

  1. SQL Server 数据库中的 MD5 和 SHA1加密算法

    MD5 和 SHA1 是一种单向加密算法,常用于密码的验证等需要加密操作的场合,在一般情况下,开发人员可以通过 Delphi 或 PHP 这类语言自己编写相关函数或者使用自带的函数,然后将加密过的结果 ...

  2. mysql md5 sha1_SQL Server 数据库中的 MD5 和 SHA1加密算法

    MD5 和 SHA1 是一种单向加密算法,常用于密码的验证等需要加密操作的场合,在一般情况下,开发人员可以通过 Delphi 或 PHP 这类语言自己编写相关函数或者使用自带的函数,然后将加密过的结果 ...

  3. mysql md5 sha1_SQL Server 数据库中的 MD5 和 SHA1

    MD5 和 SHA1 是一种单向加密算法,常用于密码的验证等需要加密操作的场合,在一般情况下,开发人员可以通过 Delphi 或 PHP 这类语言自己编写相关函数或者使用自带的函数,然后将加密过的结果 ...

  4. 如何在SQL Server数据库中加密数据

    如何在SQL Server数据库中加密数据 为了防止某些别有用心的人从外部访问数据库,盗取数据库中的用户姓名.密码.信用卡号等其他重要信息,在我们创建数据库驱动的解决方案时,我们首先需要考虑的的第一条 ...

  5. 在ASP.NET中将图片存储到Sql Server数据库中

    在ASP.NET中将图片存储到Sql Server数据库中 http://hi.baidu.com/rayshow/blog/item/360e8ff9662c8b5a252df268.html 索引 ...

  6. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

  7. mysql raiserror_RAISERROR在SQL Server数据库中的用法

    raiserror  是由单词 raise error 组成 raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误.[ 以下资料来源于sql ser ...

  8. SQL Server数据库中、获得刚插入新记录的自动ID号

    以下的文章主要是介绍在SQL Server数据库中正确获得刚插入一条新记录的自动ID号的实际操作过程,下面就是文章对其的主要内容的具体描述,望大家在浏览之后会对其有更深的了解. 使用[IDENT_CU ...

  9. 从sqlserver中数据写入mysql_[SQL Server]SQL Server数据库中如何返回INSERT INTO语句插入/写入数据后的记录值(比如ID等)?...

    问题描述 SQL Server数据库中,有时候当我们使用INSERT INTO语句写入数据后,需要返回写入数据对应的自增ID或者GUID,以便根据此记录进行后续的操作.那么SQL语句如何实现返回记录值 ...

最新文章

  1. python统计文件行数检测字符串_python统计文件中的字符串数目示例
  2. 分布式内存数据库的CAP-BASE原理
  3. python人工智能——机器学习——分类算法-朴素贝叶斯算法
  4. Oracle IMPDP
  5. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 23丨向CEO汇报工作的人【难度中等】​
  6. 纵表、横表互转的SQL
  7. jqGrid编辑—公共规则【附视频、ppt、源码】
  8. [转]Python中多线程与多进程中的数据共享问题!
  9. mysql中member_在MySql中实现MemberShip的权限管理
  10. rect函数_Python基础进阶:从函数到高级魔法方法--Day 6
  11. ArcGIS 拓扑验证与编辑共享要素
  12. matlab冒号,括号的用法
  13. 【学习笔记】离散数学(Discrete Math) - 证明 Proof 3
  14. 【蓝桥杯省赛真题24】Scratch哪吒飞行 少儿编程scratch蓝桥杯省赛真题讲解
  15. 基于卷积神经网络的皮肤癌检测系统
  16. 用天翎低代码做办公协同软件,简单高效
  17. Jenkins发布api jobs,利用supervisor管理运行
  18. 用JS写小鸟飞行的游戏
  19. android多看阅读打不开pdf,请收藏!这是一份最全的PDF问题解决方案
  20. 计算机网络超时重传时间,TCP超时重传机制

热门文章

  1. oracle 查询表里信息_查看ORACLE 数据库及表信息
  2. centos 命令行执行多个命令_命令行如何执行jar包里面的方法
  3. python爬虫ip代理池_爬虫教程-Python3网络爬虫开发——IP代理池的维护
  4. nosuchelementexception 是什么异常_老公出轨有哪些日常表现?老公出轨异常表现
  5. FinCEN就非托管加密钱包报告规则征集意见时间将截至今日12时59分
  6. SAP License:2021年:传统ERP丧钟响起
  7. 《如何搭建小微企业风控模型》第四节 了解数据源
  8. SparkStreaming手动维护Kafka Offset的几种方式
  9. 电商平台营销活动玩法大全、拓客、吸粉、裂变、引流、团购返现、限时折扣、找人代付、砍价代付、多人拼团、优惠套餐、秒杀折扣、满减优惠、电商营销、电商推广、商品促销、营销红包、Axure原型、rp原型
  10. Key/Value之王Memcached初探:一、掀起Memcached的盖头来