MD5加密「123456」:html
HashBytes('MD5','123456')
結果:0xE10ADC3949BA59ABBE56E057F20F883E (提示:看完最後,結果要進行轉換。)算法
函數 | 描述 | 返回值 |
HashBytessql |
HashBytes ('加密方式', '待加密的值') 加密方式= MD2 | MD4 | MD5 | SHA | SHA1 |
返回值類型:varbinary(maximum 8000 bytes) |
123456的MD5 有工具可知結果爲:e10adc3949ba59abbe56e057f20f883e函數
HashBytes生成的結果爲:0xE10ADC3949BA59ABBE56E057F20F883E,16進制的數值,去掉「0x」轉換爲小寫值就徹底與MD5值吻合了,在此須要用另外一個函數(sys.fn_sqlvarbasetostr)把varbinary的值轉換爲varchar類型的,完整sql以下:工具
select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','123456')),3,32)
結果就是完整的MD5值:e10adc3949ba59abbe56e057f20f883epost
-- ============================================= -- Description: 實現MD5加密算法,返回對字符串的加密結果串 -- ============================================= ALTER FUNCTION MD5 ( @src VARCHAR(255) , -- 源字符串 @type INT = 32 -- 加密類型(16/32),默認值32 ) RETURNS VARCHAR(255) WITH EXECUTE AS CALLER AS BEGIN -- 存放md5加密串(ox) DECLARE @smd5 VARCHAR(34) -- 加密字符串此處用MD5加密,還有一種是SHA1加密 SET @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 UPPER(@smd5) END
能夠在UserInfo表中添加一個觸發器,當插入和修改用戶密碼時修改密碼爲加密後的結構,同時更新到UserInfo表中。加密
插入和修改時直接明文便可,自動觸發加密。url
查詢時,where條件調用自定義加密方法便可,where uPassword= dob.MD5(@uPassword)spa
-- ============================================= -- Description: 實現對用戶密碼進行MD5加密 -- ============================================= alter TRIGGER trg_EncryptPwd ON UserInfo AFTER INSERT, UPDATE AS BEGIN IF ( UPDATE(uPassword) ) BEGIN DECLARE @uId dbo.vkey DECLARE @uPassword VARCHAR(32) -- 獲取用戶ID和密碼 SELECT @uId = [uId] , @uPassword = uPassword FROM inserted -- 更新密碼 UPDATE UserInfo SET uPassword = dbo.MD5(@uPassword, 32) WHERE [uId] = @uId END END GO