- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在修改一个应用程序,该应用程序使用 SQL Server 的 PWDEncrypt 和 PWDCompare 函数将散列密码存储到表的 varbinary 列中。
由于不应使用这些函数(由于算法可能发生变化或它们在未来被弃用),我想将应用程序转换为使用支持的 HASHBYTES 函数。
是否有人拥有使用 HASHBYTES 功能实现与 PWDENCRYPT/PWDCOMPARE 相同功能的代码,这样我就不必让每个用户在转换期间更改他们的密码并且现有的散列密码仍然有效?
我正在使用 SQL Server 2008 R2。
最佳答案
我已经成功地使用 SQL 生成了我自己的 PWDENCRYPT 和 PWDCOMPARE 实现。
不幸的是,由于在 PWDENCRYPT 部分使用了 RAND(),您无法将其转换为 UDF。
这是执行 PWDEncrypt 的代码
DECLARE @passwordToEncrypt NVARCHAR(MAX)
SET @passwordToEncrypt = 'Password'
DECLARE @salt VARBINARY(4)
SET @salt = CONVERT(VARBINARY(4), RAND())
DECLARE @encryptedPassword VARBINARY(128)
SET
@encryptedPassword
=
0x0100
+
--Salt
@salt
+
--Hash of Password + Salt
HASHBYTES('SHA1', @passwordToEncrypt + CONVERT(NVARCHAR(MAX), @salt))
SELECT
@passwordToEncrypt [OriginalPassword],
@encryptedPassword [MyPWDEncrypt],
PWDCOMPARE(@passwordToEncrypt, @encryptedPassword) [SQLPWDCompare]
这是执行 PWDCompare 的代码
DECLARE @passwordToTest NVARCHAR(MAX)
SET @passwordToTest = 'Password'
DECLARE @encryptedPassword VARBINARY(128)
SET @encryptedPassword = PWDENCRYPT(@passwordToTest)
SELECT
@passwordToTest [OriginalPassword],
@encryptedPassword [SQLPWDEncrypt],
CASE WHEN
@encryptedPassword
=
--Header
0x0100
+
--Salt
CONVERT(VARBINARY(4), SUBSTRING(CONVERT(NVARCHAR(MAX), @encryptedPassword), 2, 2))
+
--Hash of Password + Salt
HASHBYTES('SHA1', @passwordToTest + SUBSTRING(CONVERT(NVARCHAR(MAX), @encryptedPassword), 2, 2))
THEN 1 ELSE 0 END [MyPWDCompare]
关于sql-server - SQL Server - PWDEncrypt 和 PWDCompare 的替代实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8503582/
我正在尝试通过我的程序登录我们的数据库,但是当我这样做时,我得到了无效的凭据,所以我不确定从哪里开始希望任何人都可以帮助我解决这个问题,因为我之前没有使用过 pwdencryp 和 pwdcompar
我认为我要问的问题是不可能的,但是,我认为值得一试。 我们有一个使用 SQL Server PWDEncrypt 和 PWDCompare 函数的应用程序。 系统的一部分会创建用户的副本(相同的登录名
我正在修改一个应用程序,该应用程序使用 SQL Server 的 PWDEncrypt 和 PWDCompare 函数将散列密码存储到表的 varbinary 列中。 由于不应使用这些函数(由于算法可
我是一名优秀的程序员,十分优秀!