为了提高用户的安全性,我希望隐藏MSSQL数据库中的所有用户密码。 Web应用程序位于ASP Classic中,SQL字段是varchar(max)。
我听说过散列代码,但这是如何工作的? 是在SQL字符串中进行还是制作ASP函数?
我当前的用户表格设置为:
id username password
1 jersey plaintextpassword
2 timber plaintextpassword
....
答案 0 :(得分:4)
我更喜欢像md5一样存储用户密码
在md5sum之后保存密码 当用户尝试登录时
表格中的用户变量
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
答案 1 :(得分:1)
我实际上刚刚发现了一个免费的ASP脚本,它实现了SHA-256单向加密算法,这是生成数字签名的行业标准方法之一。
它还包含一个表单和ASP代码,用于演示可以使用的算法。 SHA-256算法是用于生成数字签名的行业标准方法之一。它通常被称为摘要,数字签名,单向加密,散列或校验和算法。 SHA-256的一个常见用途是用于密码加密,因为它本质上是单向的,并不意味着您的密码不会受到字典攻击。
我不知道这是否比MD5更安全,但在这里:
答案 2 :(得分: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);
}
答案 3 :(得分:0)
这通常是服务器端ASP功能。
创建用户或更新密码后,您可以将纯文本密码传递给创建密码单向散列的函数。 MD5或类似版本通常就足够了,但根据所需的安全性,您可能希望选择更难以击败加密算法。然后将散列密码发送到数据库以便以加密格式存储。
登录时,如果输入密码的纯文本版本,请使用与之前相同的算法对其进行哈希处理,然后与数据库中存储的哈希版本进行比较。如果它们相同,则表示他们输入了正确的密码。
对于黑客来说,使用名为salt的东西可能会让这个问题变得更加困难。这是一个随机生成的字符串,以纯文本格式存储在数据库中,您可以将其添加到原始密码中,从而添加您要检查的密码,以便为散列值添加一些随机性。如果您不这样做,则可以使用突破一个密码的强力攻击来破解所有密码。如果你使用salt,那么他们只会为每次暴力攻击获得一个密码。