iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

0
自我挑戰組

回顧再出發~系列 第 6

SQL MD5 加密

SQL SEVER有提供加密,加密方式有MD2、MD4、MD5、SHA、SHA1 或 SHA2 雜湊
這裡我們用到的是MD5
function HashBytes('MD5',xxx)
e.g.
declare @id varchar(max) ='123456'
HashBytes('MD5',@id)

想說這樣就結束了嗎?
沒有,有幾個地方要注意
1.我們一般用的都是varchar,但它轉成varbinary了,所以要再轉換一下.
2.我們一般不會保留0x,所以在轉換時,要注意要不要保留Pre


1.varbinary轉成varchar
轉換方式有3種
sys.fn_sqlvarbasetostr(@HashBytes)
CONVERT(VARCHAR(50),@HashBytes,1)--Sql Server2008及以上
sys.fn_varbintohexsubstring(1,@HashBytes,1,0)

2.保留Pre與不保留Pre的設定
2.1.sys.fn_sqlvarbasetostr(@HashBytes)

它預設就是會留,所以不要的話,要從第3個開始拿
substring(sys.fn_sqlvarbasetostr(@HashBytes),3,32)

2.2.CONVERT(VARCHAR(50),@HashBytes,@var)
@var 1:保留 2:不保留
e.g.CONVERT(VARCHAR(50),@HashBytes,1)
e.g.CONVERT(VARCHAR(50),@HashBytes,2)

2.3.sys.fn_varbintohexsubstring(@var,@HashBytes,1,0)
@var 1:保留 0:不保留
e.g.sys.fn_varbintohexsubstring(1,@HashBytes,1,0)
e.g.sys.fn_varbintohexsubstring(0,@HashBytes,1,0)

-------------------------------看一看
declare @id varchar(max) ='123456'

select 'w21-保留0x前缀',CONVERT(VARCHAR(50),HashBytes('MD5',@id),1)
union all select 'w22-不保留0x前缀',lower(CONVERT(VARCHAR(50),HashBytes('MD5',@id),2))
--Convert()函数是Sql Server2008及以上版本支持,2008以下版本可以使用下面的方法:
union all select 'w3-cc', substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',@id)),3,32)
--第1个参数表示是否保留0x前缀,1为保留,0为不保留
union all select N'w41-保留0x前缀', sys.fn_varbintohexsubstring(1,HashBytes('MD5',@id),1,0)
union all select N'w40-不保留0x前缀', sys.fn_varbintohexsubstring(0,HashBytes('MD5',@id),1,0)

ref
https://www.cnblogs.com/JuneZhang/p/6396896.html


上一篇
SSRS Report 條件複選
下一篇
SSRS Report 圖表 & 插入分頁
系列文
回顧再出發~18

尚未有邦友留言

立即登入留言