SQL Server MD5使用

SQL Server 官网:https://docs.microsoft.com/zh-cn/sql/t-sql/functions/hashbytes-transact-sql?view=sql-server-2017

语法

HASHBYTES ( '<algorithm>', { @input | 'input' } )  
  
<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512   

参数

<algorithm>
标识用于对输入执行哈希操作的哈希算法。 这是必选参数,无默认值。 需要使用单引号。 从 SQL Server 2016 (13.x) 开始,除 SHA2_256 和 SHA2_512 以外的所有算法都已过时。

@input
指定包含要对其执行哈希操作的数据的变量。 @input 为 varchar、nvarchar 或 varbinary。

'input'
指定一个表达式,其计算结果为要对其执行哈希操作的字符或二进制字符串。

输出符合算法标准:MD2、MD4 和 MD5 为 128 位(16 个字节);SHA 和 SHA1 为 160 位(20 个字节);SHA2_256 为 256 位(32 个字节),SHA2_512 为 512 位(64 个字节)。

适用范围:SQL Server 2012 (11.x) 到 SQL Server 2017

对于 SQL Server 2014 (12.x) 和更早版本,允许的输入值限制为 8000 个字节。

返回值

varbinary(最大 8000 个字节)

Remarks

请考虑使用 CHECKSUM 或 BINARY_CHECKSUM 作为替代方案,以计算哈希值。

自 SQL Server 2016 (13.x) 起,已弃用 MD2、MD4、MD5、SHA 和 SHA1 算法。 请改用 SHA2_256 或 SHA2_512。 旧算法将继续起作用,但会抛出弃用事件。

举个例子:

SELECT HashBytes('MD5','a' )
--0C C1 75 B9 C0 F1 B6 A8 99 E2 69 77 26 61 --MD5加密返回varbinary
--¾uÆ¿É×1¼æiw&a

SELECT sys.fn_sqlvarbasetostr(HashBytes('MD5','a' ))
--0x0cc175b9c0f1b6a831c399e269772661 --varbinary转十六进制

SELECT RIGHT(sys.fn_sqlvarbasetostr(HashBytes('MD5','a' )),32)
--0cc175b9c0f1b6a831c399e269772661  --截取右32位

--MD5 (nvarchar) --不然结果会不准确
SELECT RIGHT(sys.fn_sqlvarbasetostr(HashBytes('MD5',
cast(column_nvarchar as varchar(8000)) )),32)

--MD5 非中文类型(除中文、中文符号等)
RIGHT(sys.fn_sqlvarbasetostr(HashBytes('MD5',CONCAT(id,'') )),32)

注:

除了中文和特殊符号外,GBK和UTF8加密的结果是相同的。

SQL Server没有UTF8编码集,常用的是Chinese_PRC_CI_AS

MD5如果包含中文,会自动转码GBK进行加密,so 你懂得

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章