我有一個帶有用戶名和密碼字段的表。現在我不想將密碼完全保存爲用戶輸入的字符串。我希望將此字段加密或轉換爲GUID,以便包括SQL工作人員在內的任何人都無法看到它。 如果用戶丟失密碼,他必須拿出一個新的密碼,並在桌上更新。 任何想法,我可以如何實現這一目標?sql server 2008密碼字段加密
1
A
回答
1
OWASP guidelines表示使用單向散列來存儲密碼。
本文介紹瞭如何在ASP.NET:http://www.15seconds.com/issue/000217.htm
(你沒有提到你正在使用連接到服務器的技術,所以我把猜測的ASP.NET)
+0
這是類似的,但不是一個確切的重複http://stackoverflow.com/questions/615704/preferred-method-of-storing-passwords-in-database @ erikson的答案包含如何做到這一點的鏈接。 – David 2011-04-21 21:18:00
1
您可以使用哈希字節來執行此操作。像這樣的:假設密碼= admin
DECLARE @dummy nvarchar(4000);
select @dummy = CONVERT(nvarchar(4000),'admin');
SELECT HashBytes('SHA1', @dummy);
1
CREATE FUNCTION dbo.fnInitRc4
(
@Pwd VARCHAR(256)
)
RETURNS @Box TABLE (i TINYINT, v TINYINT)
AS
BEGIN
DECLARE @Key TABLE (i TINYINT, v TINYINT)
DECLARE @Index SMALLINT,
@PwdLen TINYINT
SELECT @Index = 0,
@PwdLen = LEN(@Pwd)
WHILE @Index <= 255
BEGIN
INSERT @Key
(
i,
v
)
VALUES (
@Index,
ASCII(SUBSTRING(@Pwd, @Index % @PwdLen + 1, 1))
)
INSERT @Box
(
i,
v
)
VALUES (
@Index,
@Index
)
SELECT @Index = @Index + 1
END
DECLARE @t TINYINT,
@b SMALLINT
SELECT @Index = 0,
@b = 0
WHILE @Index <= 255
BEGIN
SELECT @b = (@b + b.v + k.v) % 256
FROM @Box AS b
INNER JOIN @Key AS k ON k.i = b.i
WHERE b.i = @Index
SELECT @t = v
FROM @Box
WHERE i = @Index
UPDATE b1
SET b1.v = (SELECT b2.v FROM @Box b2 WHERE b2.i = @b)
FROM @Box b1
WHERE b1.i = @Index
UPDATE @Box
SET v = @t
WHERE i = @b
SELECT @Index = @Index + 1
END
RETURN
END
和這個函數加密/解密部分
CREATE FUNCTION dbo.fnEncDecRc4
(
@Pwd VARCHAR(256),
@Text VARCHAR(8000)
)
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @Box TABLE (i TINYINT, v TINYINT)
INSERT @Box
(
i,
v
)
SELECT i,
v
FROM dbo.fnInitRc4(@Pwd)
DECLARE @Index SMALLINT,
@i SMALLINT,
@j SMALLINT,
@t TINYINT,
@k SMALLINT,
@CipherBy TINYINT,
@Cipher VARCHAR(8000)
SELECT @Index = 1,
@i = 0,
@j = 0,
@Cipher = ''
WHILE @Index <= DATALENGTH(@Text)
BEGIN
SELECT @i = (@i + 1) % 256
SELECT @j = (@j + b.v) % 256
FROM @Box b
WHERE b.i = @i
SELECT @t = v
FROM @Box
WHERE i = @i
UPDATE b
SET b.v = (SELECT w.v FROM @Box w WHERE w.i = @j)
FROM @Box b
WHERE b.i = @i
UPDATE @Box
SET v = @t
WHERE i = @j
SELECT @k = v
FROM @Box
WHERE i = @i
SELECT @k = (@k + v) % 256
FROM @Box
WHERE i = @j
SELECT @k = v
FROM @Box
WHERE i = @k
SELECT @CipherBy = ASCII(SUBSTRING(@Text, @Index, 1))^@k,
@Cipher = @Cipher + CHAR(@CipherBy)
SELECT @Index = @Index +1
END
RETURN @Cipher
END
這是由彼得實施,但它可以幫助ü........ ........
相關問題
- 1. 加密SQL Server 2008中的密碼列
- 2. 爲SQL Server 2008數據庫添加用戶 - 無密碼字段?
- 3. SQL Server 2008列加密
- 4. SQL Server 2008加密連接
- 5. SQL Server 2008本機SQL密碼恢復
- 6. 使用SHA1在Sql Server 2008上加密密碼
- 7. 在sql server中隱藏密碼字段
- 8. 加密SQL Server 2008中某些字段的最佳方法?
- 9. 瞭解SQL Server加密(通過密碼)?
- 10. SQL Server中的密碼加密
- 11. 使用SQL Server 2008密碼散列CLR
- 12. 'sa'在SQL Server 2008中更改密碼
- 13. SQL Server密碼
- 14. 如何加密SQL Server 2008數據庫
- 15. SQL Server 2008中的對稱加密
- 16. SQL Server 2008中的加密丟失
- 17. 如何從MS SQL Server 2008中解密密碼?
- 18. 在傳統SQL Server數據庫中加密密碼字段的簡單方法
- 19. C#4.0/Sql Server 2008:業務層加密/解密
- 20. SQL Server 2008中 - 透明數據加密未解密訪問
- 21. Symfony2 SonataAdminBundle密碼字段加密
- 22. iPhone SQLite密碼字段加密
- 23. 使用SHA2加密密碼字段
- 24. SQL Server 2012加密
- 25. SQL Server SSL加密
- 26. 加密在SQL Server
- 27. SQL Server列加密
- 28. SQL Server 2005加密
- 29. SQL Profiler 2008 - 顯示密碼
- 30. 密碼字段
http://codahale.com/how-to-safely-store-a-password/ – 2011-04-21 21:18:12
非常感謝您的幫助。是的,我使用的是asp.net。 – reder 2011-04-21 21:23:05