散列密码,SQL
我在SQL散列密码,直接像这样:散列密码,SQL
DECLARE @HashThis nvarchar(4000);
SET @HashThis = 'SecretPizza'
INSERT into Users (UserId,Password)
Values ('CryptTest',HASHBYTES('SHA1', @HashThis))
结果:
当我尝试和改变SHA1
算法SHA2_256
或SHA2_512
我得到以下错误:
问题1 - 这真的应该给我像中文字符?
问题2 - 那些是有效的算法,所以我怎么不能使用它们,为什么加密设置@HashThis
为空?
问题1:你获得“中国人喜欢”字,因为你将通过HASHBYTES返回到一个nvarchar列VARBINARY值,所以SQL Server正在试图解释字节Unicode代码点(字符)。
Ooooo谢谢。现在你解释它了,我觉得它很简单.. -_-我应该如何设置我的列类型以获得最佳结果? – phadaphunk 2012-07-27 16:04:56
VARBINARY,但请参阅添加问题2的答案。 ! – 2012-07-27 16:15:46
多谢先生,现在一切都很清楚 – phadaphunk 2012-07-27 16:16:49
第一做从双
选择HASHBYTES( 'SHA2-256',@HashThis);
,看看你会得到什么..
我得到'NULL' ... – phadaphunk 2012-07-27 15:49:56
如果您尝试'选择HASHBYTES('SHA2_256',@HashThis)'''''''''''''''''''''''''''' - 注意在算法名称中不要连字符下划线。 – 2012-07-27 16:01:10
是的,我在这个问题上把它和下划线放在一起。 – phadaphunk 2012-07-27 16:04:44
什么是列USERS.PASSWORD的数据类型不是SQL Server 2012的支持,然后再? – 2012-07-27 15:51:42
为此不使用'hashbytes' - 你不能使用'hashbytes'来加盐,并且限制自己只能选择一些(已经损坏的)算法。请考虑在应用程序级别使用'bcrypt'并插入由此产生的散列。 – corsiKa 2012-07-27 15:52:08
@ChrisDickson它是NVARCHAR。它应该是什么? – phadaphunk 2012-07-27 15:54:28