Sql Server內置函數實現MD5加密

前面整理過備忘錄,點擊查看總結Sql Server內置函數實現MD5加密

實例

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
相關文章
相關標籤/搜索