資料庫裡的DM5和SHA1

2021-08-05 20:49:15 字數 1241 閱讀 5365

md5 和 sha1 是一種單向加密演算法,常用於密碼的驗證等需要加密操作的場合,在一般情況下,開發人員可以通過 delphi 或 php 這類語言自己編寫相關函式或者使用自帶的函式,然後將加密過的結果根據需要儲存到資料庫中。

但在某些情況下,可能需要在資料庫端計算 md5 和 sha1 雜湊值,比如說在儲存過程或自定義函式內部。開源資料庫 mysql 就提供類似這樣的內建函式,以下語句就可以分別顯示字串 「12345」 的 md5 和 sha1 值,返回結果為字串型:

select md5

( '12345');

select sha1

( '12345');

但 sql server 中沒有直接提供類似這樣的函式。在 sql server 2000 中,如果需要加密可以使用未文件化的pwdencrypt()pwdcompare()函式來加密資料和比較結果,加密方式是微軟自己的演算法,隨著 sql server 版本的公升級,函式的加密結果可能也會有所不同。

不過在 sql server 2005 中,微軟提供了乙個函式hashbytes()可以用來計算乙個字串的 md5 和 sha1 值,以下語句分別獲得字串 「12345」 的 md5 和 sha1:

select hashbytes

( 'md5', 

'12345') ;

select hashbytes

( 'sha1', 

'12345') ;

hashbytes() 函式的返回結果是 varbinary 型,也就是以 0x 開頭 16 進製形式的二進位制資料,不過通常情況下,我們需要的都是字串型的資料,很多人首先想到的可能就是用 cast 或 convert 函式將varbinary 轉換為 varchar,但這樣轉換後的結果會是亂碼,正確轉換 varbinary 可變長度二進位制型資料到 16 進製字串應該使用系統內建函式sys.fn_varbintohexstr(),如下所示:

select sys.fn_varbintohexstr

(hashbytes

( 'md5', 

'12345'))

sys.fn_varbintohexstr() 函式只在 sql server 2005 中有效,在 sql server 2000 中實現相同功能使用系統擴充套件儲存過程:master..xp_varbintohexstr

SHA1和md5的使用

sha1的全稱是secure hash algorithm 安全雜湊演算法 加密雜湊函式將任意長度的二進位制字串對映為固定長度的小型二進位制字串。加密雜湊函式有這樣乙個屬性 在計算上不大可能找到雜湊為相同的值的兩個不同的輸入 也就是說,兩組資料的雜湊值僅在對應的資料也匹配時才會匹配。資料的少量更改會...

python的md5和sha1加密

首先介紹一下md5和sha1 md5 md5的全稱是message digestalgorithm 5 資訊 摘要演算法 128位長度。目前md5是一種不可逆演算法。具有很高的安全性。它對應任何字串都可以加密成一段唯一的固定長度的 sha1 sha1的全稱是secure hashalgorithm ...

python的md5和sha1加密

md5 md5的全稱是message digest algorithm 5 資訊 摘要演算法 輸出長度是32。目前md5是一種不可逆演算法。具有很高的安全性。它對應 任何字串都可以加密成一段唯一的固定長度的 sha1 sha1的全稱是secure hash algorithm 安全雜湊演算法 sha...