2011-04-04 68 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