但在某些情況下,可能需要在數(shù)據(jù)庫(kù)端計(jì)算 MD5 和 SHA1 哈希值,比如說(shuō)在存儲(chǔ)過(guò)程或自定義函數(shù)內(nèi)部。開(kāi)源數(shù)據(jù)庫(kù) MySQL 就提供類(lèi)似這樣的內(nèi)置函數(shù),以下語(yǔ)句就可以分別顯示字符串 “12345” 的 MD5 和 SHA1 值,返回結(jié)果為字符串型:
SELECT sha1 ( '12345' ) ;
但 SQL Server 中沒(méi)有直接提供類(lèi)似這樣的函數(shù)。在 SQL Server 2000 中,如果需要加密可以使用未文檔化的 pwdencrypt() 和 pwdcompare() 函數(shù)來(lái)加密數(shù)據(jù)和比較結(jié)果,加密方式是微軟自己的算法,隨著 SQL Server 版本的升級(jí),函數(shù)的加密結(jié)果可能也會(huì)有所不同。
不過(guò)在 SQL Server 2005 中,微軟提供了一個(gè)函數(shù) hashbytes() 可以用來(lái)計(jì)算一個(gè)字符串的 MD5 和 SHA1 值,以下語(yǔ)句分別獲得字符串 “12345” 的 MD5 和 SHA1:
SELECT hashbytes ( 'SHA1' , '12345' ) ;
hashbytes() 函數(shù)的返回結(jié)果是 varbinary 型,也就是以 0x 開(kāi)頭 16 進(jìn)制形式的二進(jìn)制數(shù)據(jù),不過(guò)通常情況下,我們需要的都是字符串型的數(shù)據(jù),很多人首先想到的可能就是用 CAST 或 Convert 函數(shù)將varbinary 轉(zhuǎn)換為 varchar,但這樣轉(zhuǎn)換后的結(jié)果會(huì)是亂碼,正確轉(zhuǎn)換 varbinary 可變長(zhǎng)度二進(jìn)制型數(shù)據(jù)到 16 進(jìn)制字符串應(yīng)該使用系統(tǒng)內(nèi)置函數(shù) sys.fn_VarBinToHexStr() ,如下所示:
sys.fn_varBinToHexStr() 函數(shù)只在 SQL Server 2005 中有效,在 SQL Server 2000 中實(shí)現(xiàn)相同功能使用系統(tǒng)擴(kuò)展存儲(chǔ)過(guò)程: master..xp_varBinToHexStr 。
?
?
來(lái)源: http://blog.chinaunix.net/uid-10697776-id-2935575.html
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
