gpt4 book ai didi

sql-server - 如何散列已经存在的密码?

转载 作者:行者123 更新时间:2023-12-03 00:33:35 25 4
gpt4 key购买 nike

在测试并确保我的 Send_email 函数使用 SQL 表中的硬编码用户和密码成功进行身份验证后,我现在尝试对密码进行哈希处理。

我的列的设置方式是这样的:

变量 |值(value)

密码 | someP@ssword

列都是 varchar,值列的长度为 1000(这太多了吗?我将其设置为那么多,因为我读到 sha 512 需要很多长度或其他东西,并且看到使用 1000 的示例至少如此)

我正在使用这个查询来散列,

  INSERT INTO [dbo].[Table] (value)
VALUES(HASHBYTES('SHA2_512', 'someP@ssword'))

但它会生成一个非二进制哈希,我怀疑这就是为什么我收到此电子邮件身份验证失败错误的原因,因为它可能无法破译非二进制密码字符。但问题是我在 value 列中有其他值,所以我无法将整个列转换为 varbinary。

那么有没有办法对硬编码的密码进行哈希处理,或者我必须将其作为哈希插入?或者有没有办法我可以只转换那个特定的字段/单元格,而不必改变值列的其余设计,这样它也不会影响那里的其他值?还是我应该为密码创建一个完全独立的列并将其设置为二进制?

编辑:我必须在此电子邮件函数调用中传递密码以进行身份​​验证:
Send-EMail -EmailFrom $From_Email -SendTo $To_Email -Body $Email_Body -Subject $Job_Success_Email_Subject -Username $SmtpUser -Password $SmtpPassword

但冯在评论中说我无法将其中的散列密码作为凭据传递。那么这意味着我必须在表中保持非散列?我认为散列在这种情况下会很好地工作......

最佳答案

看起来您对上面评论中不相关的讨论感到困惑。

首先:散列密码在您的 Send-EMail 中不起作用函数,因为函数无法“取消散列”所述密码。阅读 Hashing vs Encryption 的简介.

如果您想保护您的密码并能够检索原始值,您需要 加密 它。加密的主题非常大,并且超出了可以用 SO 编写的范围。我将提供一些链接供您阅读:

http://www.manjuke.com/2018/03/data-encryption-in-sql-server-using-t.html
https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/encrypt-a-column-of-data?view=sql-server-2017
https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/sql-server-and-database-encryption-keys-database-engine?view=sql-server-2017

通过密码短语加密将是最简单的实现,但也是最弱的,因为任何阅读 SP 代码的人都会发现密码短语,因此可以解密数据。 备注 该密码短语本身可以传递到 ENCRYPTBYPASSPHRASE作为参数,允许您将其(安全地)存储在数据库之外的其他位置,即您不必在 SP 代码中硬编码。如果您决定采用这种方式,您将需要自己实现密码存储方法。

使用 key 和证书的加密提供了一种非常安全的方法,但除了 之外还需要一些时间来设置。非常小心备份您的 key 。如果您丢失了 key ,您的数据就会消失,即您永远无法解密它。

至于在 varchar 中存储二进制数据专栏 - 很简单,这里有一个例子:

DECLARE @BinValue VARBINARY( 500 ) = HASHBYTES('SHA2_512', 'someP@ssword')
DECLARE @StringBinValue VARCHAR( 500 ) = CONVERT( VARCHAR( 500 ), @BinValue, 1 )
SELECT @BinValue, @StringBinValue, CONVERT( VARBINARY( 500 ), @StringBinValue, 1 ) AS BackToString

我用过你原来的 HASHBYTES函数作为示例,但您需要将其更改为加密函数。

希望这可以为您澄清事情。

关于sql-server - 如何散列已经存在的密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52437625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com