博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Sql Server内置函数实现MD5加密
阅读量:6272 次
发布时间:2019-06-22

本文共 2033 字,大约阅读时间需要 6 分钟。

前面整理过备忘录,点击查看

实例

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 CALLERAS    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    ENDGO

 

转载地址:http://angpa.baihongyu.com/

你可能感兴趣的文章
springmvc Could not write content: No serializer
查看>>
Python系语言发展综述
查看>>
新手 开博
查看>>
借助开源工具高效完成Java应用的运行分析
查看>>
163 yum
查看>>
第三章:Shiro的配置——深入浅出学Shiro细粒度权限开发框架
查看>>
80后创业的经验谈(转,朴实但实用!推荐)
查看>>
让Windows图片查看器和windows资源管理器显示WebP格式
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
vim使用点滴
查看>>
embedded linux学习中几个需要明确的概念
查看>>
mysql常用语法
查看>>
Morris ajax
查看>>
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
关于FreeBSD的CVSROOT的配置
查看>>