sql - 散列对 SQL 中的相同输入给出不同的结果
问题描述
我是加密新手。我搜索了很多,但找不到答案。
当我使用以下查询时
SELECT UserName, HASHBYTES('MD5', 'trial1') [HashedPasswd] from accounts
我得到以下结果作为加密。
0x237103B50B9AA3496711E628FA073D6F
但是,当我使用下面的查询时,密码列的值正好是 trial1
SELECT UserName, HASHBYTES('MD5', Password) [HashedPasswd] from accounts
我明白了
0x75E7A2E4F2A571D10FB8B042E4586376
可能是什么原因?
解决方案
那是因为“密码”是一个 unicode 列(可能是 NVARCHAR),而“trial1”是一个非 unicode 字符串。
您可以通过在字符串前面添加“N”来告诉 SQL Server 'trial1' 是一个 unicode 字符串。
如果您运行此查询,您将获得与“密码”列相同的哈希值。
SELECT UserName, HASHBYTES('MD5', N'trial1') [HashedPasswd] from accounts
推荐阅读
- r - 模拟一系列代码 n(比如说 1000)次,同时将结果保存在 R 中的向量中
- php - 如果我增加 PHP-FPM 池选项中的所有数字怎么办
- python - 如何将 Python 字典键分配给相应的 Python 对象属性
- java - 如何使用 gsqlarser 从连接条件中获取表名?
- api - TypeError:无法构造“标头”:名称无效
- flutter - Flutter 中一种在滚动时更改应用栏颜色的有效方法
- authentication - 它回来了:找不到 Login.aspx
- database - 在数据库事务期间做其他事情的好习惯吗?
- django - Pytest 图片上传 - 错误 rest_framework.exceptions.ParseError:多部分表单解析错误 - 多部分中的边界无效
- c++ - 如何在 Windows 上修复 VS 2019 中的 SFML 错误?