我们在数据库中存储密码哈希.基本上我们得到MD5哈希(字节数组),然后在字节数组上运行Encoding.Unicode.GetChars并将结果字符串存储在数据库中.然后,当有人登录时,我们以相同的方式散列密码并比较两个字符串.
这很好用,除了我无法在T-SQL中提取密码哈希并将其插入另一行.我可以实现的唯一方法是,如果我实际上直接从具有有效散列的另一行的选择中设置密码散列.
我试图将字符串转换为十六进制并让SQL转换它,但这也不起作用.我假设这是因为我们编码为UNICODE的字节可能不构成有效的UNICODE字符串.
例如(SQL Server:将字符串转换为十六进制字符串并返回):
当您运行以下命令时,"帮助"一词将转换为var二进制文件,然后返回到一个字符串,嘿presto!您最终会再次使用"帮助".
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), 'Help'))
Run Code Online (Sandbox Code Playgroud)
问题是,当我在密码哈希列上运行时,结果值与列中存储的值不同.如果我将包含哈希的字符串粘贴到两个'符号之间的SQL Management Studio中,它会跳过'并放入其他一些字符.再次,probalby试图插入一个不完整的UNICODE序列,因为它不是一个合适的UNICODE字符串.
所以我要找的是一种简单地获取包含密码哈希的VARCHAR(64)中的字节并将其写入编码文本格式的方法,如:
0x0F037584C99E7FD4F4F8C59550F8F507
Run Code Online (Sandbox Code Playgroud)
这样我就可以做类似的事了
UPDATE [User]
SET PasswordHash = CONVERT(NVARCHAR(64), 0x0F037584C99E7FD4F4F8C59550F8F507)
WHERE UserID = 123
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
| 归档时间: |
|
| 查看次数: |
18987 次 |
| 最近记录: |