我已經設法使用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]
代碼