使用T-SQL生成MD5哈希字符串

Gri*_*der 92 t-sql sql-server sql-server-2008

有没有办法生成类型为varchar(32)的MD5哈希字符串,而不使用fn_varbintohexstr

SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes('MD5', 'email@dot.com')), 3, 32)
Run Code Online (Sandbox Code Playgroud)

所以它可以在带有SCHEMABINDING的视图中使用

Kon*_*kus 179

CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
Run Code Online (Sandbox Code Playgroud)

  • 它没有在sql-server-2005中给出正确的答案 (4认同)

SQL*_*ace 62

使用HashBytes

SELECT HashBytes('MD5', 'email@dot.com')
Run Code Online (Sandbox Code Playgroud)

这将给你0xF53BD08920E5D25809DF2563EF9C52B6

-

SELECT CONVERT(NVARCHAR(32),HashBytes('MD5', 'email@dot.com'),2)
Run Code Online (Sandbox Code Playgroud)

这将给你F53BD08920E5D25809DF2563EF9C52B6


小智 20

解:

SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5','your text')),3,32)
Run Code Online (Sandbox Code Playgroud)


jma*_*nes 14

没有其他答案对我有用.请注意,如果传入硬编码字符串而不是从结果集中的列提供,则SQL Server将提供不同的结果.以下是让我在SQL Server和MySql之间实现完美匹配的神奇之处

select LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(varchar, EmailAddress)), 2)) from ...
Run Code Online (Sandbox Code Playgroud)


sla*_*dan 13

对于最多8000个字符的数据,请使用:

CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
Run Code Online (Sandbox Code Playgroud)

Demo

对于二进制数据(不限于8000字节),请使用:

CONVERT(VARCHAR(32), master.sys.fn_repl_hash_binary(@binary_data), 2)
Run Code Online (Sandbox Code Playgroud)

Demo


del*_*via 5

尝试这个:

select SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',  'email@dot.com' )),3,32) 
Run Code Online (Sandbox Code Playgroud)