我正在加密一个字段,password
我的表被称为usuario
具有以下字段:
idlogin
username
llave
Nombres
dni
要加密,我在插入记录时使用此过程:
create PROCEDURE RegistrarUsuario
@username nvarchar(50),
@llave nvarchar(50),
@nombres nvarchar(500),
@dni nvarchar(8)
AS
BEGIN
INSERT INTO dbo.usuario
(username,llave,Nombres,dni)
VALUES (@username
, ENCRYPTBYPASSPHRASE('password', @llave)
,@nombres
,@dni
)
end
GO
但是在加密的密钥字段中注册时,它会显示为空白:
最初,该字段
Llave
必须声明为 typeVARBINARY
,以便将加密值保存在那里。为此,表的定义应如下(或至少类似):接下来,该字段的保存
Llave
应该是:使INSERT如下:
现在,要恢复加密的密码,它将使用:
所以你
SELECT
如下:在这里你可以看到demostración
最后,您的存储过程应如下所示,注意参数的数据类型
@llave
是 aVARCHAR
而不是 aNVARCHAR
:在这里你可以看到第二个demostración
注意:我不确定是否存在加密和解密的术语,但我希望这能帮助您更好地理解答案。
最常见的解决方案之一是
salt
为每个条目使用一个附加项。PHP 中的示例,但该概念适用:
创建记录时,通过将密码与盐连接起来生成盐和散列。
存储在数据库
$salt
和$saltedPassword
.在验证密钥是否有效时,您使用与盐相同的连接,但这次使用密钥进行验证并将其与
$saltedPassword
:这样,您就不太容易受到哈希字典攻击的密码破解攻击。