Generate MD5 hash string with T-SQL

后端 未结 9 1717
自闭症患者
自闭症患者 2020-12-02 08:52

Is there a way to generate MD5 Hash string of type varchar(32) without using fn_varbintohexstr

SUBSTRING(master.dbo.fn_varbintohexstr(HashBytes(\'MD5\', \'em         


        
相关标签:
9条回答
  • 2020-12-02 09:26
    declare @hash nvarchar(50)
    --declare @hash varchar(50)
    
    set @hash = '1111111-2;20190110143334;001'  -- result a5cd84bfc56e245bbf81210f05b7f65f
    declare @value varbinary(max);
    set @value = convert(varbinary(max),@hash);
    
    
    select  
     SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', '1111111-2;20190110143334;001')),3,32) as 'OK'
    ,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5', @hash)),3,32) as 'ERROR_01'
    ,SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('MD5',convert(varbinary(max),@hash))),3,32) as 'ERROR_02'
    ,SUBSTRING(sys.fn_sqlvarbasetostr(sys.fn_repl_hash_binary(convert(varbinary(max),@hash))),3,32)
    ,SUBSTRING(sys.fn_sqlvarbasetostr(master.sys.fn_repl_hash_binary(@value)),3,32)
    
    0 讨论(0)
  • 2020-12-02 09:32

    For data up to 8000 characters use:

    CONVERT(VARCHAR(32), HashBytes('MD5', 'email@dot.com'), 2)
    

    Demo

    For binary data (without the limit of 8000 bytes) use:

    CONVERT(VARCHAR(32), master.sys.fn_repl_hash_binary(@binary_data), 2)
    

    Demo

    0 讨论(0)
  • 2020-12-02 09:32

    You didn't explicitly say you wanted the string to be hex; if you are open to the more space efficient base 64 string encoding, and you are using SQL Server 2016 or later, here's an alternative:

    select SubString(h, 1, 32) from OpenJson(
        (select HashBytes('MD5', 'email@dot.com') h for json path)
    ) with (h nvarchar(max));
    

    This produces:

    9TvQiSDl0lgJ3yVj75xStg==
    
    0 讨论(0)
提交回复
热议问题