• [小问题笔记(五)] 用SQL加密字符串(MD5、SHA1),顺便解决读取数据加密后不一样的问题


    这里用到SQL Server内置的函数 HashBytes().

    select HashBytes('MD5','bubu')
    
    select HashBytes('SHA1','bubu')

    以MD5为例,‘bubu’加密之后的MD5应是

    用刚才的SQL查询结果是:

    返回结果是VarBinary类型(以 0x 开头 16 进制形式的二进制数据)。我们一般都需要的是VarChar,用CAST或Convert转会乱码,变成这种鸟样---》 幐??�?�iる

    正确的办法,是使用下列函数:

    select sys.fn_sqlvarbasetostr(HashBytes('MD5','bubu'))

    不想要0x的话就截一下好啦:

    select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','bubu')),3,32)

    补充:

    简单的加密字符串,当然很容易得到想要的结果。如果是从数据库里读取的数据,就有可能不一样的结果了。

    select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5','bubu')),3,32)
    
    
    select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',[name])),3,32) from Agent  where id=1    --读取结果为‘bubu’

    结果:

    这是由于[name]字段的类型是nvarchar导致的,所以在加密前需要强制转化一下类型:

    select substring(sys.fn_sqlvarbasetostr(HashBytes('MD5',CAST([name] as varchar(50)))),3,32) from Agent  where id=1  


    这样就妥妥的了~

  • 相关阅读:
    【题解】【HDU 3487】Play with Chain
    学习+复习目标
    【题解】【NOIP2018PJ】对称二叉树
    NOIP2018复赛游记
    论蒟蒻的作死程度
    教你如何不用新分区添加swap
    云主机的极致优化
    Linux权限管理 特殊权限解析
    用户组管理
    vim编辑器详解
  • 原文地址:https://www.cnblogs.com/hydor/p/4043019.html
Copyright © 2020-2023  润新知