【问题标题】:How to hide user-passwords in SQL Server database如何在 SQL Server 数据库中隐藏用户密码
【发布时间】:2012-02-08 03:13:29
【问题描述】:

为了提高用户的安全性,我希望在我的 MSSQL 数据库中隐藏所有用户密码。 Web 应用程序在 ASP Classic 中,SQL 字段是 varchar(max)。

我听说过对代码进行哈希处理,但这是如何工作的? 是在 SQL 字符串中做点什么,还是做一个 ASP 函数?

我当前的用户表设置是:

id    username    password
1     jersey      plaintextpassword
2     timber      plaintextpassword
....

【问题讨论】:

标签: sql sql-server asp-classic


【解决方案1】:

我更喜欢像 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

【讨论】:

  • 这看起来很不错!是否有可能将 2 个不同的字符串生成到相同的散列字符串中?只是轻微的 1:1000000 机会?或者任何不相似的字符串都是 100% 唯一的?
  • md5是128位的,几乎不可能串通,像2^-128,如果不是绝密公司的东西你可以放心使用
  • 谢谢.. 是否可以使用 MD5 对字符串进行反散列?只是想如果我想在网页上写一个用户密码?
  • 其哈希算法不可逆。如果你想反向编码你需要选择另一种算法
【解决方案2】:

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

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

我不知道这是否比 MD5 更安全,但在这里:

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

【讨论】:

    【解决方案3】:

    这是一种将给定字符串值(密码)转换为哈希字符串的方法。这是一个 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 中?
    【解决方案4】:

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

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

    登录时,您输入密码的纯文本版本,使用与以前相同的算法对其进行哈希处理,然后与数据库中存储的哈希版本进行比较。如果它们相同,那么他们输入了正确的密码。

    您可以使用一种叫做盐的东西让黑客更难破解。这是一个随机生成的字符串,以纯文本形式存储在数据库中,您将其添加到原始密码以及您正在检查的密码中,从而为哈希值添加一些随机性。如果您不这样做,则可以使用破解一个密码的蛮力攻击来破解所有密码。如果你使用 salt,那么每次暴力攻击他们只会得到一个密码。

    【讨论】:

    • 我能请你做一个这样的ASP函数的例子吗? :) 因为我必须说,我真的不知道在这个项目中从哪里开始......
    • 你的asp网站是什么语言的?
    • 该网站是丹麦语和 ASP 经典网站
    • 它同时使用 ASP(VBScript)、JavaScript、XHTML、CSS 和 jQuery
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 2016-02-21
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    相关资源
    最近更新 更多