SQL Server 数据库中的 MD5 和 SHA1加密算法
???? MD5 和 SHA1 是一種單向加密算法,常用于密碼的驗(yàn)證等需要加密操作的場(chǎng)合,在一般情況下,開發(fā)人員可以通過 Delphi 或 PHP 這類語言自己編寫相關(guān)函數(shù)或者使用自帶的函數(shù),然后將加密過的結(jié)果根據(jù)需要存儲(chǔ)到數(shù)據(jù)庫(kù)中。
???? 但在某些情況下,可能需要在數(shù)據(jù)庫(kù)端計(jì)算 MD5 和 SHA1 哈希值,比如說在存儲(chǔ)過程或自定義函數(shù)內(nèi)部。開源數(shù)據(jù)庫(kù) MySQL就提供類似這樣的內(nèi)置函數(shù),以下語句就可以分別顯示字符串"12345"的 MD5 和 SHA1 值,返回結(jié)果為字符串型:
?????????????????????? select md5('12345');
?????????????????????? select sha1('12345');
???? 但 SQL Server??? 中沒有直接提供類似這樣的函數(shù)。在 SQL Server 2000 中,如果需要加密可以使用未文檔化的? pwdencrypt() 和 pwdcompare() 函數(shù)來加密數(shù)據(jù)和比較結(jié)果,加密方式是微軟自己的算法,隨著 SQL Server 版本的升級(jí),函數(shù)的加密結(jié)果可能也會(huì)有所不同。
???? 不過在 SQL Server 2005 中,微軟提供了一個(gè)函數(shù) hashbytes() 可以用來計(jì)算一個(gè)字符串的 MD5 和 SHA1 值,以下語句分別獲得字符串 "12345” 的 MD5 和 SHA1:
????????????????????? select hashbytes('MD5′, '12345′) ;
????????????????????? select hashbytes('SHA1′, '12345′) ;
???? hashbytes() 函數(shù)的返回結(jié)果是 varbinary 型,也就是以 0x 開頭 16 進(jìn)制形式的二進(jìn)制數(shù)據(jù),不過通常情況下,我們需要的都是字符串型的數(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(),如下所示:
???????????????????? select sys.fn_VarBinToHexStr(hashbytes('MD5′, '12345′))
sys.fn_varBinToHexStr() 函數(shù)只在 SQL Server 2005 中有效,在 SQL Server 2000 中實(shí)現(xiàn)相同功能使用系統(tǒng)擴(kuò)展存儲(chǔ)過程:master..xp_varBinToHexStr 。
轉(zhuǎn)載于:https://www.cnblogs.com/lilwzca/archive/2011/11/17/2253023.html
總結(jié)
以上是生活随笔為你收集整理的SQL Server 数据库中的 MD5 和 SHA1加密算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你不知道是什么歌啊?
- 下一篇: 现场直播的字幕是如何生成的?