亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

使用SQL2005自帶擴展函數對字符串進行MD5加密

系統 1823 0
最近,在工作中遇到一個系統整合需求,要求將兩個系統的用戶進行整合,最終實現用戶同步登錄效果。
通過分析發現其中一個系統用戶密碼采用了MD5加密,而另一個系統用戶密碼為明碼存放,為了達到同步登錄的要求首先就需要將用戶資料進行同步,將用戶名和密碼保持一致。
為了實現密碼的一致性,基于安全性的考慮決定將用戶密碼統一進行MD5加密,經過在互聯網上搜索發現了一個函數 hashbytes() ,此函數是微軟在SQL SERVER 2005中提供的,可以用來計算一個字符串的 MD5 和 SHA1 值,使用方法如下:

-- 獲取12345的MD5加密串
select ?hashbytes( ' MD5 ' ,? ' 12345 ' )?;
-- 獲取12345的SHA1加密串
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 。

為了便于使用,我將加密的過程編寫成了一個函數。代碼如下:

-- ?=============================================
--
?Author:??????? peterlu
--
?Create?date:?2008-6-11
--
?Description:??實現MD5加密算法,返回對字符串的加密結果串
--
?=============================================
ALTER ? FUNCTION ? [ dbo ] . [ MD5 ] ?
(
????
-- ?源字符串
???? @src ? varchar ( 255 ),
????
-- ?加密類型(16/32)
???? @type ? int ? = ? 32
)
RETURNS ? varchar ( 255 )
WITH ? EXECUTE ? AS ?CALLER
AS
BEGIN
????
-- ?存放md5加密串(ox)
???? DECLARE ? @smd5 ? varchar ( 34 )

????
-- ?加密字符串
???? SELECT ? @smd5 ? = ?sys.fn_VarBinToHexStr(hashbytes( ' MD5 ' ,? @src ));

????
IF ? @type = 16
????????
SELECT ? @smd5 ? = ? SUBSTRING ( @smd5 , 11 , 16 )??? -- 16位
???? ELSE
????????
SELECT ? @smd5 ? = ? SUBSTRING ( @smd5 , 3 , 32 )???? -- 32位

????
-- ?返回加密串
???? RETURN ? @smd5

END

最后,采用觸發器的方法,實現對用戶密碼的自動加密。代碼如下:

-- ?=============================================
--
?Author:??????? peterlu
--
?Create?date:?2008-6-11
--
?Description:??實現對用戶密碼進行MD5加密
--
?=============================================
CREATE ? TRIGGER ?trg_EncryptPwd
ON ??Users
AFTER?
INSERT , UPDATE
AS ?
BEGIN
????
IF ( UPDATE (Password))
????
BEGIN
????????
DECLARE ? @uid ? int
????????
DECLARE ? @pwd ? varchar ( 32 )
????????
-- ?獲取用戶ID和密碼
???????? SELECT ? @uid = UserID, @pwd = Password? FROM ?inserted
????????
-- ?更新密碼
???????? UPDATE ?Users? SET ?Password? = ?dbo.MD5( @pwd , 16 )? WHERE ?UserID? = ? @uid
????
END
END
GO

使用SQL2005自帶擴展函數對字符串進行MD5加密


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 狠狠狠色丁香婷婷综合久久五月 | 国产成人网 | 色网址在线 | 狠狠色噜噜狠狠狠狠米奇777 | 国产精品久线观看视频 | 性色网站 | 久久免费精彩视频 | 欧美日韩国产精品 | 亚洲高清视频在线播放 | 神马在线影视我不卡 | 一区二区三区欧美日韩国产 | jizz中国妇女 | 人人草人人干 | 来自深渊在线观看 | 香蕉视频一区二区三区 | 视频在线a | 午夜免费福利 | 久操免费在线视频 | 91精品国产色综合久久不卡蜜 | a亚洲欧美中文日韩在线v日本 | 日韩字幕无线乱码 | 天堂一区二区在线观看 | 国内精品久久久久影院不卡 | 日日干夜夜骑 | 第一福利在线观看 | 国产欧美精品三区 | 亚洲福利一区二区 | 久久在线看| 香蕉视频国产在线观看 | 97影院午夜在线观看琪琪 | 久久精品国产亚洲片 | 国产一区二区三区亚洲综合 | 99r精品在线| 久久精品无遮挡一级毛片 | 99久久免费国产精品特黄 | www.国产在线观看 | 精品国产人成亚洲区 | 奇米影视第四色777 奇米影视第四色7777 | 成年女人视频在线观看免费 | 久久99国产精品成人 | 日韩精品中文字幕一区三区 |