Sql Server內置函數實現MD5加密


從Sql2008開始,MSSQL提供了hashbytes函數,該函數可以對字符串進行MD2、MD4、MD5、SHA、SHA1、SHA2_256、SHA2_512七種算法的加密

1.使用hashbytes函數進行加密的語法格式:

HASHBYTES ( '算法', expression)

第一個參數就是使用單引號包裹起來的算法名稱,這個名字可以以下七種方式中的任何一種:

MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512

第二個參數就是將要被加密的字符串表達式,可以是常量、變量、表達式或字段等。

--例如:密碼是 123456

select HashBytes('MD5','123456')

輸出:0xE10ADC3949BA59ABBE56E057F20F883E

返回值是一個最大8000長度的varbinary。沒錯,返回值是varbinary,並不是直接的字符串

我們想要的結果,是MD5加密后的字符串,但hashbytes返回的是varbinary,這倒是沒關系,有一個系統函數sys.fn_sqlvarbasetostr是專門用來將varbinary轉為varchar的,當然您可以使用其它方式轉換,既然MSSQL提供了直接轉換的函數

 

2.使用sys.fn_sqlvarbasetostr函數轉換的語法格式:

sys.fn_sqlvarbasetostr(varbinary)

參數就是varbinary類型的表達式了,返回值則就是varchar類型的字符串。

--例如:密碼是 123456 的MD5轉換為 Varchar 類型

select sys.fn_sqlvarbasetostr(HashBytes('MD5','123456'))

輸出:0xe10adc3949ba59abbe56e057f20f883e

結果,是varbinary轉換為varchar類型,大寫也變成了小寫,但加密的數值前面兩位0x並不是MD5加密后的結果部分,我們還需要使用截取函數將它去掉,獲得完整MD5加密結果,

函數中有兩個都可以實現該功能,一個就是substring、另一個則是stuff。

 

3.1使用 Substring函數截取的語法格式

 SUBSTRING(expression,start,length)

第一參數就是字符串表達式,可以是常量、變量、表達式或字段等

第二個參數是截取的開始位數

第三個參數是截取的長度位數

--例如:密碼是 123456 的MD5轉換為 Varchar 類型,並從第3位開始截取出32位字符

select SUBSTRING( sys.fn_sqlvarbasetostr(HashBytes('MD5','123456')),3,32)

輸出:e10adc3949ba59abbe56e057f20f883e

 

3.2 使用Stuff函數截取的語法格式使用stuff等於是把前兩位挖掉填入空字符串

STUFF(expression,start,length,replace)

第一參數就是字符串表達式,可以是常量、變量、表達式或字段等

第二個參數是截取的開始位數

第三個參數是截取的長度位數

第四個參數是替換的字符串內容

--例如:密碼是 123456 的MD5轉換為 Varchar 類型,並從第1位開始截取到2位字符替換成空格(space(0) 里面的0 表示沒有空格,如是其他數值則表示增加對應數值的空格替換

select Stuff( sys.fn_sqlvarbasetostr(HashBytes('MD5','123456')),1,2,SPACE(2))

 

綜上操作,我們如果要對一個字符串進行MD5加密就完成了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM