sqlserver 進行MD5加密

來源:互聯網
上載者:User

標籤:

 

官方定義函數:

HashBytes ( <algorithm>‘, { @input | input }

<algorithm>::= MD2 | MD4 | MD5 | SHA | SHA1

參數解釋:

algorithm:標識用於對輸入執行雜湊操作的雜湊演算法。這是必選參數,無預設值。需要使用單引號。

@input : 資料類型為 varchar、nvarchar 或 varbinary

input 字串資料

傳回值:

varbinary (最大8000位元組)

備忘:允許的輸入值限制為 8000 個位元組。輸出符合演算法標準:MD2、MD4 和 MD5 為 128 位(即 16 個位元組);SHA 和 SHA1 為 160 位(即 20 個位元組)

 

一:樣本MD5加密:

一個完整的寫法:

PRINT    LOWER(RIGHT(sys.fn_varbintohexstr(HASHBYTES(‘MD5‘,‘這個字串需要加密‘)),32))   >> 8926206f9ebb0bee4bbb0724fccb4410

 

下面逐步拆分

1.先用HashBytes函數看看產生的結果

PRINT HASHBYTES(‘MD5‘,‘這個字串需要加密‘)   >>  0x8926206F9EBB0BEE4BBB0724FCCB4410

由於該函數返回的值是二進位varbinary 資料,不是字串不能直接使用,所以要將其轉換為字串

2.用sys.fn_varbintohexstr(@pbinin)

@pbinin : varbinary (max) 資料類型

返回:nvarchar 資料類型

PRINT sys.fn_varbintohexstr(HASHBYTES(‘MD5‘,‘這個字串需要加密‘))  >>  0x8926206f9ebb0bee4bbb0724fccb4410

 

3.如何得到32位的MD5值,貌似最大也就只能到32位,使用 Right 函數進行截取

PRINT RIGHT(sys.fn_varbintohexstr(HASHBYTES(‘MD5‘,‘這個字串需要加密‘)),32) >> 8926206f9ebb0bee4bbb0724fccb4410

函數定義

RIGHT ( character_expression , integer_expression )
參數:
character_expression :可為字元或位元據運算式,常量,變數,列,任何能隱式轉換為varchar或nvarchar的資料類型(text,ntext需要進行顯示轉換)
integer_expression :正整數,將返回的字元數
傳回值:character_expression 若為 非Unicode 返回 varchar , 若為unicode 則返回nvarchar

 

4.如果需要統一大小寫 可使用  lower(character_expression )  , upper(character_expression ) 進行轉換

 

二:關於MD5加密的字元編碼問題

 

先來幾段對比

1. 字元 “è”

SQLServer :C05FC85230C60ED8FECB3670E77E603D

結果:與C# gb2312對應

 

2. 字元 “這是漢字”

 

SQLServer : E8C9AB48B603F81B87F4ED4F1005BB6E

結果:與C# gb2312對應

 

3. 字元 “123456”

 

SQLServer : E10ADC3949BA59ABBE56E057F20F883E

結果:與C# gb2312,utf-8 , utf-7 , ascii  對應

 

4.字元 “pxs123”

 

SQLServer : 684D95499489435C9351EFCDD68B25F2

結果:與C# gb2312,utf-8 , utf-7 , ascii  對應

 

4.字元 “[email protected]#.”

SQLServer :FC05D7826726E773E993BDCA88F6B181

結果:與C# gb2312,utf-8 , ascii  對應

 

 

5.字元 英文符號“[email protected]#.&*)|_;“

SQLServer :4C782D772102482D09696D11BDE1A02A

結果:與C# gb2312,utf-8 , ascii  對應

 

 

 

6.字元 中文英混合符號“《!)*、“

SQLServer :1A891B7B5B3285925E2783694C2A367C

結果:與C# gb2312對應

 

6.字元 中文英混合符號“漢字hanzi“

SQLServer :49212C24BDB2FA254880119A332F86D6

結果:與C# gb2312對應

 

 

8.字元 “プログラミン“

SQLServer :045B556A9CF5F0FE92EC7A7C9B3F66CA

結果:與C# gb2312對應

 

綜上對比:

sqlserver中md5加密函數,字元存在非英文字元會按照gb2312方式編碼計算出加密值,那麼C#,JS等計算MD5加密值是就需要轉為gb2312編碼,才能得出一樣的結果。

若為都為英文字元時,用utf-8編輯即可

 

 

^若有紕漏之處,歡迎指正!^

sqlserver 進行MD5加密

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.