【发布时间】:2016-09-15 10:15:50
【问题描述】:
我在 sql server 中使用 aes_256 算法加密了我的密码字段。密码字段现在已加密。现在我想登录用户,验证过程应该在服务器上完成。 我为验证过程编写的代码是:
CREATE PROCEDURE Procedure_UserLogin
@username varchar(50),
@pwd varchar(50),
@responseMessage INT OUTPUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @userID INT
IF EXISTS(SELECT TOP 1 username FROM userInfo WHERE username=@username)
BEGIN
open symmetric key key1
decryption by certificate namecert
SET @userID=(SELECT username FROM userInfo WHERE username=@username AND encryptedpwd=(ENCRYPTBYKEY(KEY_GUID('key1'),@pwd)))
IF (@userID IS NULL)
SET @responseMessage=0 /*INAVLID PASSWORD*/
ELSE
SET @responseMessage=1 /*VALID USERNAME AND PASSWORD*/
END
ELSE
SET @responseMessage=2 /*INVALID USERNAME*/
END
但是响应总是0。请告诉我我在做什么错误?
【问题讨论】:
-
不要加密密码。任何被加密的东西都可以被解密。对您的密码进行加盐和哈希处理,并将哈希存储在数据库中。当用户登录时,对密码进行加盐和哈希处理,并将生成的哈希值与数据库中的哈希值进行比较。
-
您正在选择用户名 (varchar) 到 @userID (Int)。我很惊讶您没有收到转换错误。
-
@dbugger,我没有将我的加密密码带到客户端,而且我认为 aes_256 算法生成的结果类似于哈希和盐一起完成的结果。如果我错了,请纠正我。
-
@JoeC,即使我很惊讶我没有收到转换错误。无论如何,我已经完成了更正。谢谢
-
不,大不相同。如果您的系统受到威胁,它会暴露您的用户密码。 darkreading.com/…
标签: sql sql-server validation encryption passwords