SQL Server Management Studio:如何编辑MD5值

时间:2013-04-05 12:24:58

标签: sql-server sql-server-2008 hash md5 sql-server-2008-express

我在SQL Server Management Studio中创建了具有以下结构的表[user]

id int PRIMARY NOT NULL  
login varchar(255) NOT NULL  
password varchar(32) NOT NULL  

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

id    | login    | password
1     | admin    | MD5('admin') 

但保存后,插入的密码为MD5('admin'),但我希望21232f297a57a5a743894a0e4a801fc3哈希。

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

谢谢

P.S。我使用的是SQL Server 2008 Express 10.50.1600.1和Microsoft SQL Server Management Studio 10.50.1600.1。

3 个答案:

答案 0 :(得分:3)

  1. 哈希值是字节数组,而不是字符串。使用VARBINARY列类型。
  2. 不要插入未加密码的MD5密码。它takes 2.96 seconds to reverse crack online the hash to the password。使用正确的盐渍密码并在表格中写下盐。
  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功能......)
  4. 不要重新发明轮子,特别是如果你不说流畅的加密,不要重新发明安全轮。大多数框架都有会员管理模块。例如。 Introduction to Membership

答案 1 :(得分:2)

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

CONVERT(VARCHAR(32), HashBytes('MD5', 'admin'), 2)

答案 2 :(得分:1)

Edit Top 200 Rows功能用于交互式数据输入,其中只接受值,而不是在存储之前需要评估的表达式。

如果要将插入的实际值作为表达式的结果,请使用查询窗口插入数据。 (我不知道您是否仅仅因为想要尝试该功能或其他原因而使用Edit功能,但如果这是因为您不知道如何使用SQL插入数据,请查看在this manual。)

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

因此,更改列的类型,然后打开新的查询窗口并键入命令(或语句)以插入数据。应该为你做的工作可能是这样的:

INSERT INTO user (id, login, password)
VALUES (1, 'admin', HASHBYTES('MD5', 'admin'));

公平地说,您可能省略更改列类型,在这种情况下,您需要将上述简单HASHBYTES调用替换为@Garath's answer之类的调用。不管你是否真的需要将哈希值存储为varchar(32)而不是varbinary(16),这是一个完全不同的问题。