如何在SQL Server 2012中将Hashbytes函数的SHA2_256加密数据类型转换为varchar(256)

时间:2017-11-16 19:21:54

标签: sql sql-server

我想在SQL Server 2012中使用SQL实现密码加密系统。

HASHBYTES方法必须只有nvarcharvarbinary数据类型。

update members 
set passwd = cast(HASHBYTES('SHA2_256', 'asd123123') as varchar(256)),
    pwchangedat = GETDATE()
where userid = 'abcd1234'

Select查询在更新查询上方应用的意外结果:

?lZX?갅4磎?닽뙷?I?#?뚭?

我想修复此varchar(256)数据类型字符串'asd123123'应用SHA-256加密。

我想:

c82a6c7f5a58a915814334cda5a2ef88ab8cba922f49ec1623e2248ceabf7ddc

我如何获得解决方案?

此致

2 个答案:

答案 0 :(得分:6)

我认为这就是你要找的......

select convert(varchar(256),HASHBYTES('SHA2_256','asd123123'),2)

参见Binary Styles Section(因为Hashbytes返回varbinary)

因此....

update members set
    passwd = convert(varchar(256),HASHBYTES('SHA2_256','asd123123'),2),
    pwchangedat = GETDATE()
    where userid = 'abcd1234'

答案 1 :(得分:0)

如果数据类型是 Varchar,那么我们得到文字字符串和 SQL 变量的相同哈希代码,如果 SQL 变量是 NVARCHAR 数据类型,那么当您使用文字字符串和 NVARCHAR 变量时,您会得到不同的哈希值SHA2_256 函数。运行以下代码进行检查。

    DECLARE @VarcharInput  VARCHAR(70)  = 'Test';
    DECLARE @NVarcharInput NVARCHAR(70) = 'Test';

    SELECT HASHBYTES('SHA2_256','Test')         AS NewHashValue;
    --0x532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F345E25
    SELECT HASHBYTES('SHA2_256',@VarcharInput)  AS NewHashValue; 
    --0x532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F345E25
    SELECT HASHBYTES('SHA2_256',@NVarcharInput) AS NewHashValue;
    --0xE6FA3CA87B1B641AB646D3B4933BBA8D0970763F030B6578A60ABDEAE7366247