基本上我试图给用户一个特定的密码,所以我可以在系统上测试一些功能,因为我只有我们的管理员帐户,我不能玩,我只是选择一个随机帐户,所以我可以做我的测试.所以这是我尝试更新:
UPDATE dbo.Login SET Salt=CAST('bPftidzyAQik' AS VARBINARY),Password=CAST('0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B' AS VARBINARY) WHERE LoginID=10947
它运行正常,但数据库中的代码看起来是一个日语,另一个的语法看起来很好,但它不是我放入的值,我希望它使用我输入的确切值,所以我可以登录.如何我这样做吗?我尝试了几种不同的转换和转换解决方案,没有运气.
解决方法
尝试这个:
UPDATE dbo.Login SET Salt=CAST('bPftidzyAQik' AS VARBINARY),Password=0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B WHERE LoginID=10947
(你不需要将存储十六进制值的字符串转换为varbinary – 这就是默认情况下的内容,没有引号)
问题是,如何生成该密码十六进制值,并且您是否使用相同的编码来生成它,因为您要阅读它?如果您计划将该数据转换回字符串,则需要一些代码才能执行此操作.这是我写的一个函数:
CREATE FUNCTION ConvertBinary ( @value AS varbinary(max) ) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @result AS varbinary(max),@result2 AS varchar(max),@idx AS bigint; IF @value IS null return null; SELECT @result = @value; SELECT @result2 = ''; SELECT @idx = 1; WHILE substring(@result,@idx,1) != 0 AND @idx < len(@result) BEGIN SET @result2 = @result2 + cast(substring(@result,1) as char(1)); SET @idx = @idx + 1; END RETURN @result2; END
但是,我不知道这对你有多大帮助,因为无论使用这些字段的应用程序是多么可能处理的值与此函数所期望的不同.对于记录,此函数采用varbinary值,该值最初为utf-8字符串,并返回该字符串的varchar值.祝你好运!