2009年6月4日

SQL Server 加密函數

PWDENCRYPT與PWDCOMPARE函數

而 PWDENCRYPT 與 PWDCOMPARE 函數,一個負責加密、一個負責比對,但就是沒有「解密」的函數。意思也就是說,使用 PWDENCRYPT 加密過的資料是無法反解的,類似一種 Hash 處理方法。

PWDENCRYPT 函數
select pwdencrypt('xxxxx')


注意:每次執行 pwdencrypt('xxxxx') 的結果都會不一樣,這是一種對密碼保護的機制。

PWDCOMPARE 函數
select pwdcompare('xxxxx', 加密後字串)

執行後的結果為 1 或 0 而已,1 代表密碼比對成功,0 代表密碼比對失敗。

這兩個 Function 在 SQL 2000, 2005, 2008 都可以使用,只是我也發現了一些不同的 SQL Server 版本之間在使用這兩個 Function 時的小差異:
1.使用 PWDENCRYPT 時 SQL 2000 與 SQL 2005/2008 加密過後的 hash 長度不一樣!
2.SQL 2005/2008 加密過的密碼在 SQL 2000 中無法使用 PWDCOMPARE 函數驗證密碼!
3.SQL 2005 與 SQL 2008 基本上是相容的。
4.SQL 2000 加密過的密碼雖然比較長,但在 SQL 2005/2008 中還是可以使用 PWDCOMPARE 函數驗證密碼!