zoukankan      html  css  js  c++  java
  • Sql Server内置函数实现MD5加密

    转自:https://www.cnblogs.com/JuneZhang/p/7269140.html

    Sql Server内置函数实现MD5加密

    前面整理过备忘录,点击查看总结Sql Server内置函数实现MD5加密

    实例

    MD5加密“123456”:

    HashBytes('MD5','123456')

    结果:0xE10ADC3949BA59ABBE56E057F20F883E (提示:看完最后,结果要进行转换。)

    函数

    函数 描述 返回值

    HashBytes

     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值:e10adc3949ba59abbe56e057f20f883e

    复制代码
    -- =============================================
    -- 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表中。

    插入和修改时直接明文即可,自动触发加密。

    查询时,where条件调用自定义加密方法即可,where uPassword= dob.MD5(@uPassword)

    复制代码
    -- =============================================
    -- 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
  • 相关阅读:
    Python的一些版本分析
    2006年的长春.NET俱乐部
    大病了一场,不过闲时对AJAX探索时,实现了IE TREE无刷新
    关于AJAX开发
    提供可在WSS上使用的MYTREE
    关于WSS搜索的问题
    转发:使用JavaScript删除ASP.NET生成的HttpCookie
    AJAX(2)
    在将WEBPART打包成*.CAB包和*.MSI安装包后,竟然无法将其安装到指定的WSS网站
    转发:Session研习笔记
  • 原文地址:https://www.cnblogs.com/gered/p/9600347.html
Copyright © 2011-2022 走看看