我想在SQL Server 2012中使用SQL实现密码加密系统。
HASHBYTES
方法必须只有nvarchar
,varbinary
数据类型。
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
我如何获得解决方案?
此致
答案 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