從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加密就完成了。
SQL Server的內建函式
字元函式 1,返回字元表示式中最左側字元的ascii 值 select ascii a a 97,a 65 2,將整數ascii 轉換為字元 select char 97 97 a,65 a 3,返回具有給定的整數 的unicode字元 select nchar 65 a 4,返回表達第乙個字元的u...
SQL Server 常用內建函式
本文用於收集在運維中經常使用的系統內建 built in 函式,持續整理中 1,檢視資料庫的id和name db id db name db name db id 2,檢視物件的id和name,物件的schema,物件的定義 object id schema name object name obj...
Sql server 內建函式實現md5加密
md5加密 123456 hashbytes md5 123456 函式 描述返回值 hashbytes hashbytes 加密方式 待加密的值 加密方式 md2 md4 md5 sha sha1 返回值型別 varbinary maximum 8000 bytes 123456的md5 有工具可...