2011-04-04 87 views
1

如何将HASHBYTES返回值转换为GUID?如何在TSQL存储过程中将varbinary转换为GUID?

这是我到目前为止。

CREATE PROCEDURE [dbo].[Login] 
    @email nvarchar, 
    @password varchar 
AS 
BEGIN 
    DECLARE @passHashBinary varbinary; 
    DECLARE @newPassHashBinary varbinary; 

    -- Create a unicode (utf-16) password 
    Declare @unicodePassword nvarchar; 
    Set @unicodePassword = CAST(@password as nvarchar); 

    SET @passHashBinary = HASHBYTES('md5', @password); 
    SET @newPassHashBinary = HASHBYTES('md5', @unicodePassword); 
+0

请尝尝盐密码! [彩虹表](http://en.wikipedia.org/wiki/Rainbow_table)简单一点:使用电子邮件 - HASHBYTES(@email +'。'+ @ password) – RichardTheKiwi 2011-04-04 19:52:21

回答

6

可简单地把它:

select cast(hashbytes('md5','foo') as uniqueidentifier) 

但有两个问题挥之不去:

  • 为什么投HASHBYTES来的GUID?为什么不使用适当的存储类型,即BINARY(16)
  • 我希望你知道MD5哈希密码基本上没用,对不对?由于rainbow tables。您需要使用安全散列方案,如HMACHA1 of Digest
+0

两点都可以。这是一个我正在为一家公司工作的遗留网站,这些东西早已建立,现在改变他们的工作很多。 – chobo 2011-04-04 19:25:49

+1

此外,您的代码注释假定SQL Server Unicode类型为“UTF-16”。这是不正确的。 SQL Server Unicode类型编码为'UCS-2':http://msdn.microsoft.com/en-us/library/ms179342.aspx – 2011-04-04 19:25:55