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

[转]SQL Server 数据库中的 MD5 和 SHA1的更多相关文章

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

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

  2. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  3. .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)

    .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...

  4. SQL server数据库中的DateTime类型出现的问题

    我们知道这个SQL server数据库中的DateTime类型是数据库应用开发中经经常使用到的一种数据类型.而C#语言中也有DateTime类型,尽管二者都是用来描写叙述时间的,可是它们的默认值是不同 ...

  5. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

    C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...

  6. C#从SQL server数据库中读取l图片和存入图片

    原文:C#从SQL server数据库中读取l图片和存入图片 本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStr ...

  7. 清空SQL Server数据库中所有表数据的方法

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

  8. 浅析SQL Server数据库中的伪列以及伪列的含义

    SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个 ...

  9. SQL Server 数据库中的异常信息与编号

    SQL Server 数据库中的系统表提供了强大的元数据信息,其中 dbo.sysmessages 表中存储了数据库执行命令过程中的所有消息. SELECT * FROM master.dbo.sys ...

随机推荐

  1. hdu 1397 (素数判定)

    一开始提交了这个,果断TLE #include <cstdio> #include <iostream> #include <string> #include &l ...

  2. yum只下载不安装dokcer

    yum install --downloadonly --downloaddir=/test/ docker-io 有三个依赖包,如果不知道现后依赖顺序,可以强制安装 哦了

  3. javascript中函数的写法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. ZJOI2012 网络——LCT相关题目

    有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构成的环. 在这个图上,你 ...

  5. C++笔记(1)----此运算符函数的参数太多

    在VS2015中定义了这样一个类: #include<iostream> #include<vector> #include<string> using names ...

  6. leetcode Ch3-DFS & Backtracking I

    一.树的遍历 [非递归版] 1. 后序 class Solution { public: vector<int> postorderTraversal(TreeNode *root) { ...

  7. PG数据库空间大小及数据库对象占用空间大小

    select pg_size_pretty(pg_database_size('lrisk')); --查询数据库剩余空间 select pg_database.datname,pg_size_pre ...

  8. 问题记录-Get data from file(fonts/arial.ttf) failed, error code is 32

    time:2015/04/19 1. 描述:运行cocos的cpp-test例子,结果修改了代码之后提示错误:Get data from file(fonts/arial.ttf) failed, e ...

  9. composer 应用【Modern PHP】

    目录 安装(linux) composer.lock 文件 composer.josn 文件 自动加载PHP组件 组件包库地址 实例 composer私有仓库 composer 遵循PSR准则,解决安 ...

  10. git团队操作

    1.git命令行 1)分支的创建 git branch 分支名 分支创建之后,就会自动pull master的内容 2)分支的查询 git branch 3)分支的进入 git checkout 分支 ...