创建了一个加密密码列,但在运行时无法在SQL Server中对其进行解密

创建了一个加密密码列,但在运行时无法在SQL Server中对其进行解密,sql,sql-server,Sql,Sql Server,我已经创建了一个加密的密码列,但是当我解密它时,它会显示空值。当我必须在SQL Server中执行查询时,它会解密,但当我运行项目时,它可以解密密码 insert into [dbo].[Deaf_Login] values ('admin', HASHBYTES('SHA2_256', 'admin'), '192.168.43.100', 'a', '12/26/2019')` 以上几行用于在表中创建加密列 select loginid, username, con

我已经创建了一个加密的密码列,但是当我解密它时,它会显示空值。当我必须在SQL Server中执行查询时,它会解密,但当我运行项目时,它可以解密密码

insert into [dbo].[Deaf_Login]  
values ('admin', HASHBYTES('SHA2_256', 'admin'), '192.168.43.100', 'a', '12/26/2019')`
以上几行用于在表中创建加密列

select 
    loginid, username, 
    convert(varchar(60), DECRYPTBYPASSPHRASE('SHA2_256', vpassword))
from
    Deaf_Login
这些代码行,我解密了那个列,但它不工作

不可能对哈希进行解密。这是因为散列确实如此 根本不加密原始值。而散列则应用 单向数学算法将原始值,导致 二进制值。哈希密码比密码更安全 加密,因为可以比较哈希值进行验证 不存储原始密码(加密密码或普通密码) 正文:


如果您可以将加密用作加密短语'SHA2_256','admin' 然后通过convertvarchar60,解密短语'SHA2_256',col_name


所以,首先,用同样的方法使用两边

SHA是散列,不是加密。SHA不是散列,你能提供更多信息吗。HASHBYTES肯定是散列,不管它使用什么原语,也不是解密密码的伴随函数。如果你试图了解如何验证现有密码,请注意HASHBYTES'SHA2_256','admin'将始终产生相同的结果。您应该比较哈希,而不是明文密码。还可查看:关键衍生、盐、胡椒。您永远不应该加密为方便用户登录系统而存储的密码,而应该只加密哈希。这是否回答了您的问题?
IF HASHBYTES('SHA2_256','admin') = HASHBYTES('SHA2_256',@SuppliedPassword) 
    PRINT 'correct password;