如何在SQL Server数据库中隐藏用户密码

3
为了提高用户的安全性,我希望在我的MSSQL数据库中隐藏所有的用户名和密码。网络应用程序使用的是ASP Classic,并且SQL字段是varchar(max)。
我听说过哈希编码,但这是如何工作的?是否需要在SQL字符串中完成,还是制作一个ASP函数?
我的当前用户表设置如下:
id    username    password
1     jersey      plaintextpassword
2     timber      plaintextpassword
....

1
请查看 https://dev59.com/8kXRa4cB1Zd3GeqPtqg6 - Jan Dragsbaek
4个回答

4

我希望使用md5存储用户密码

当用户尝试登录时,将md5值后的密码保存

从表单中获取用户变量

var_username = jersey
var_password = 123456

// dont forget to escape for sql injection
// generate md5sum for password
var_md5password = md5(password)

SELECT * FROM users WHERE username = 'var_username' AND password = 'var_md5password'

例如
|- id -|- username -|- password -|
|-  1 -|- jersey   -|- 123456   -|
|-  2 -|- timber   -|- 1234567  -|

带有MD5的表格

|- id -|- username -|-             password             -|
|-  1 -|- jersey   -|- e10adc3949ba59abbe56e057f20f883e -|
|-  2 -|- timber   -|- fcea920f7412b5da7be0cf42b8c93759 -|

更安全的方式
 secret_key = topsecretkey
 password: 123456
 md5(password+secretkey)
 it will generate a better md5

这看起来非常不错!有没有可能将两个不同的字符串生成为相同的哈希字符串?即使是一百万分之一的微小几率?或者任何不相似的字符串都是100%独特的? - MicBehrens
1
MD5是128位的,几乎不可能发生碰撞,就像2^-128一样。如果不是顶级机密公司的事情,你可以安全地使用它。 - Utku Yıldırım
谢谢。使用MD5是否可以对字符串进行反哈希操作?我在考虑如果我想要在网页上写入用户密码的话,这是否可行? - MicBehrens
它的哈希算法不可逆。如果你想要反向编码,你需要选择另一个算法。 - Utku Yıldırım

1

我刚刚找到了一个免费的ASP脚本,实现了SHA-256单向加密算法,这是生成数字签名的行业标准方法之一。

它还包含一个表单和ASP代码,演示了该算法的使用方法。SHA-256算法是生成数字签名的行业标准方法之一。它通常被称为摘要、数字签名、单向加密、哈希或校验和算法。SHA-256的常见用途是用于密码加密,因为它是单向的,但这并不意味着您的密码不会受到字典攻击的影响。

我不知道这是否比MD5更安全,但我们可以试试:

http://www.freevbcode.com/ShowCode.asp?ID=2565


0

这通常是一个服务器端的ASP函数。

当创建用户或更新密码时,您会将明文密码传递给一个函数,该函数将创建密码的单向哈希。MD5或类似的算法通常足够,但根据所需的安全性,您可能希望选择更难以破解的加密算法。然后将哈希密码以加密格式发送到数据库进行存储。

登录时,您需要使用与之前相同的算法对输入的明文密码进行哈希,然后将其与数据库中存储的哈希版本进行比较。如果它们相同,则表示输入了正确的密码。

您可以使用称为盐的东西使黑客更难破解。这是一个随机生成的字符串,以纯文本形式存储在数据库中,您将其添加到原始密码中,因此您正在检查的密码,以添加一些随机性到哈希值中。如果不这样做,那么可以使用穷举攻击来突破一个密码,并用于破解所有密码。如果使用盐,则每个暴力攻击只能破解一个密码。


我能请你写一个ASP函数的例子吗? :) 因为我必须说,我真的不知道从哪里开始这个项目... - MicBehrens
你的 ASP 网站使用的是哪种编程语言? - Matt Fellows
1
该网站是丹麦语和ASP Classic编写的。 - MicBehrens
它同时使用了ASP(VBScript)、JavaScript、XHTML、CSS和jQuery。 - MicBehrens

0
这里有一个方法,可以将给定的字符串值(密码)转换为哈希字符串。这是C#代码,因此可以与Dot net一起使用。
    public static string HashString(string value, string salt)
    {
        value = salt + value;
        HashAlgorithm myHasher = new SHA1CryptoServiceProvider();
        byte[] myHashInBytes = myHasher.ComputeHash(System.Text.Encoding.Default.GetBytes(value));
        return Convert.ToBase64String(myHashInBytes);
    }

但是我的应用程序不是在ASP.NET中,而是在ASP Classic中? - MicBehrens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接