zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Apache 虚拟主机 VirtualHost 配置
    EAX、ECX、EDX、EBX寄存器的作用
    Python中文文档 目录(转载)
    八度
    POJ 3268 Silver Cow Party (最短路)
    POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
    2013金山西山居创意游戏程序挑战赛——复赛(1) HDU 4557 非诚勿扰 HDU 4558 剑侠情缘 HDU 4559 涂色游戏 HDU 4560 我是歌手
    HDU 4549 M斐波那契数列(矩阵快速幂+欧拉定理)
    UVA 11624 Fire! (简单图论基础)
    HDU 3534 Tree (树形DP)
  • 原文地址:https://www.cnblogs.com/JuneZhang/p/7269140.html
Copyright © 2011-2022 走看看