首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server Management Studio:如何编辑MD5值

SQL Server Management Studio:如何编辑MD5值
EN

Stack Overflow用户
提问于 2013-04-05 20:24:58
回答 3查看 7.8K关注 0票数 1

我有一个在SQL Server Management Studio中创建的表[user],其结构如下:

代码语言:javascript
复制
id int PRIMARY NOT NULL  
login varchar(255) NOT NULL  
password varchar(32) NOT NULL  

现在,我想将第一个用户插入到数据库中。右键单击表格[user],选择Edit top 200 rows,然后在网格中键入新的用户值:

代码语言:javascript
复制
id    | login    | password
1     | admin    | MD5('admin') 

但是在保存之后,插入的密码是MD5('admin'),但我希望得到的是21232f297a57a5a743894a0e4a801fc3散列。

如何在Microsoft SQL Server Management Studio中执行此操作?

谢谢

附注:我使用的是SQL Server 2008 Express 10.50.1600.1和Microsoft SQL Server Management Studio 10.50.1600.1。

EN

回答 3

Stack Overflow用户

发布于 2013-04-05 20:38:57

  1. 哈希值是字节数组,而不是字符串。使用VARBINARY列类型。
  2. 不插入未加盐密码的MD5。It takes 2.96 seconds to reverse crack the hash to the password。使用正确的加盐密码,并在table.
  3. Right click to table [user], choose Edit top 200 rows and type new user values into the grid.中写入加盐密码那你还能期待什么?表编辑是一项输入值的功能,如果输入字符串MD5('admin'),则表中的值将为...MD5('admin')。它不是交互式函数赋值器(除了MD5不是SQL Server function...)

之外

不要重复发明轮子,特别是如果你不会说流利的密码,就不要重新发明安全轮子。大多数框架都有用于成员管理的模块。例如:Introduction to Membership

票数 3
EN

Stack Overflow用户

发布于 2013-04-05 20:40:23

不能在网格表中运行查询,必须运行查询才能进行更新。要计算MD5,您可以使用:

代码语言:javascript
复制
CONVERT(VARCHAR(32), HashBytes('MD5', 'admin'), 2)
票数 2
EN

Stack Overflow用户

发布于 2013-04-05 21:32:51

Edit Top 200 Rows特性用于交互式数据输入,其中只接受值,而不接受在存储之前需要计算的表达式。

如果希望插入的实际值是表达式的结果,请使用查询窗口插入数据。(我不知道您使用Edit特性仅仅是因为您想尝试该功能,还是出于其他原因,但如果是因为您不知道如何使用SQL语句插入数据,那么可以看看this manual。)

此外,与@Damien has correctly noted一样,Transact-SQL中也没有MD5函数。其中一个叫做HASHBYTES,它可以使用包括MD5在内的各种散列算法。但是这个函数的结果是varbinary,而不是varchar。特别是对于MD5,它是varbinary(16)。因此,要存储HASHBYTES的直接结果,需要相应地更改password列的类型。

因此,请更改列的类型,然后打开一个新的查询窗口并键入命令(或语句)以插入数据。应该为您做这项工作的代码可能如下所示:

代码语言:javascript
复制
INSERT INTO user (id, login, password)
VALUES (1, 'admin', HASHBYTES('MD5', 'admin'));

为了公平起见,您可以省略更改列类型,在这种情况下,您需要将类似上面的简单HASHBYTES调用替换为类似于@Garath's answer的调用。但是,您是否真的需要将散列存储为varchar(32)而不是varbinary(16),这是一个完全不同的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15833934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档