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 你懂得

 

 

 

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