散列密码,SQL

散列密码,SQL

问题描述:

我在SQL散列密码,直接像这样:散列密码,SQL

DECLARE @HashThis nvarchar(4000); 
SET @HashThis = 'SecretPizza' 

INSERT into Users (UserId,Password) 
Values ('CryptTest',HASHBYTES('SHA1', @HashThis)) 

结果:

enter image description here

当我尝试和改变SHA1算法SHA2_256SHA2_512我得到以下错误:

enter image description here

问题1 - 这真的应该给我像中文字符?
问题2 - 那些是有效的算法,所以我怎么不能使用它们,为什么加密设置@HashThis为空?

+0

什么是列USERS.PASSWORD的数据类型不是SQL Server 2012的支持,然后再? – 2012-07-27 15:51:42

+1

为此不使用'hashbytes' - 你不能使用'hashbytes'来加盐,并且限制自己只能选择一些(已经损坏的)算法。请考虑在应用程序级别使用'bcrypt'并插入由此产生的散列。 – corsiKa 2012-07-27 15:52:08

+0

@ChrisDickson它是NVARCHAR。它应该是什么? – phadaphunk 2012-07-27 15:54:28

问题1:你获得“中国人喜欢”字,因为你将通过HASHBYTES返回到一个nvarchar列VARBINARY值,所以SQL Server正在试图解释字节Unicode代码点(字符)。

问题2: - 见SQL Server 2008 R2 HASHBYTES SHA2 returns null

+0

Ooooo谢谢。现在你解释它了,我觉得它很简单.. -_-我应该如何设置我的列类型以获得最佳结果? – phadaphunk 2012-07-27 16:04:56

+0

VARBINARY,但请参阅添加问题2的答案。 ! – 2012-07-27 16:15:46

+0

多谢先生,现在一切都很清楚 – phadaphunk 2012-07-27 16:16:49

第一做从双

选择HASHBYTES( 'SHA2-256',@HashThis);

,看看你会得到什么..

+0

我得到'NULL' ... – phadaphunk 2012-07-27 15:49:56

+0

如果您尝试'选择HASHBYTES('SHA2_256',@HashThis)'''''''''''''''''''''''''''' - 注意在算法名称中不要连字符下划线。 – 2012-07-27 16:01:10

+0

是的,我在这个问题上把它和下划线放在一起。 – phadaphunk 2012-07-27 16:04:44