我有一个带有用户名和密码字段的表。现在我不想将密码完全保存为用户输入的字符串。我希望将此字段加密或转换为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. 使用SHA1在Sql Server 2008上加密密码
- 5. 在sql server中隐藏密码字段
- 6. 加密SQL Server 2008中某些字段的最佳方法?
- 7. SQL Server密码
- 8. 'sa'在SQL Server 2008中更改密码
- 9. SQL Server 2008中的对称加密
- 10. 如何加密SQL Server 2008数据库
- 11. SQL Server 2008中的加密丢失
- 12. 如何从MS SQL Server 2008中解密密码?
- 13. 在传统SQL Server数据库中加密密码字段的简单方法
- 14. iPhone SQLite密码字段加密
- 15. 使用SHA2加密密码字段
- 16. C#4.0/Sql Server 2008:业务层加密/解密
- 17. SQL Server 2008中 - 透明数据加密未解密访问
- 18. 加密在SQL Server
- 19. SQL Server SSL加密
- 20. SQL Profiler 2008 - 显示密码
- 21. 用PHP加密并用SQL Server解密
- 22. 加密在SQL Server中的.NET /解密
- 23. 从密码字段获取密码
- 24. 在SQL Server中密码salting
- 25. LINQPad:更改SQL Server密码
- 26. xmlp-server-config.xml中的加密密码
- 27. C++密码字段
- 28. Java密码字段
- 29. 加入加密字段
- 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