分享

使用SQL Server內建的加密方法

 罔鸟 2011-01-26

[SQL Server]使用SQL Server內建的加密方法

前兩天聽到有人提到SQL Server本身也有提供加密方法讓我們可以對我們的使用者密碼做加密,確保資料不會被竊取,這是我以前完全不考慮的做法,其原因有三:

1.綁定資料庫,其他的資料庫系統就不能用了(總不會想SQL Server用內建,Oracle用程式寫吧?)

2.舊版本的SQL Server也沒有支援(SQL Server 2005後才有提供此功能)

3.不好debug(不能解密回來看到底哪邊錯了)

雖 然短時間內我仍不會在產品內用這方法,但了解一下也不錯啦,在拜讀了Tiger投稿在RUN!PC的文章後,大致了解了這個加密功能的使用,以下簡單示範 一下,我先下一段SQL,其中hashbytes代表的是SQL Server所提供的加密function而MD5就是大家所熟知的加密演算法囉,我使用以下的SQL指令將12345做了加密:

1 insert into Region (RegionID, RegionDescription) Values ('9', hashbytes('MD5','12345'))

但卻發現我剛剛insert的資料出現了亂碼,依據Tiger跟MSDN的說法,hashbytes這個fucntion回傳的為 「varbinary」而不是「字串」形態,所以我們需要使用sys.fn_VarBinToHexStr() function來幫我們轉換成字串:

image

 

我修改一下我的SQL指令,加上sys.fn_VarBinToHexStr() function:

1 insert into Region (RegionID, RegionDescription) Values ('10', sys.fn_VarBinToHexStr(hashbytes('MD5','12345')))

這時就發現資料正確囉,呈現了MD5加密過後的資料﹕

image

 

OK,玩到這邊時我才想到一個問題,雜湊法應該是不可逆的,也就是說無法將這段資料解密回來,那我們程式要如何去判斷?呵,因為它每次雜湊出來的結果都一樣(有可能被暴力法攻破),所以其實我們只要使用這句SQL就可以得到我們想要的結果囉:

1 select * from Region where RegionDescription=sys.fn_VarBinToHexStr(hashbytes('MD5','12345'))

 

下圖我們可以同時看到我下的SQL、我查出來的結果與兩次雜湊後的結果是相同:

image

 

這個功能是挺方便的,可以讓我們的資料做到一些基本的保護,在不考量我前頭提到的三點的狀況下,可以考慮使用此功能來進行資料加密,但因為不可逆,大概也只比較適合用在密碼一類的資料上吧。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多