繁体   English   中英

如何使用哈希密码连接到MySQL数据库

[英]How to connect to MySQL database using hashed password

目前,我正在研究连接到MySQL数据库以便检索和存储数据的软件。 该软件本身正在按预期运行,但是我想实现一些新的安全功能。

这些安全功能之一是将数据库用户的密码存储为哈希而不是纯文本。 作为记录,我没有使用表来验证用户,而是在谈论要连接到数据库本身的数据库用户。

我目前正在使用MySQL连接字符串,该字符串以纯文本格式发送密码:

public abstract Database()
    {
        ReadConfig();
        connectionstring = "SERVER=" + server + ";" +
                "DATABASE=" + database + ";" +
                "UID=" + username + ";" +
                "PASSWORD=" + password + ";";
        try
        {
            connection = new MySqlConnection(connectionstring);
        }
        catch (MySqlException ex)
        {
            LogService.Log("ERROR - " + ex.ToString());
        }
    }

我还将这些数据存储在用户的计算机上,以便用户可以更改服务器地址,数据库,用户名和密码。 如我所说,这是以纯文本存储的。 服务器地址,数据库名称和以纯文本格式存储的用户名对我来说都可以,但是我不想以纯文本格式存储密码。

生成SHA1哈希(或其他哈希方法)不是问题,因为我已经有一种生成这些哈希的方法。

简而言之,我想将密码另存为哈希,并在连接字符串中使用该哈希。 我该如何实施?

编辑:我知道这是一个“通过隐蔽性实现安全性”的解决方案,它不是扩展软件安全性的最佳方法。 我正在寻找方法来发现如何使用质询响应方法,但与此同时,我想实现以上方法。

您在此处可以做的最好的事情是加密用户的登录信息,并在要登录时使用纯文本。 MySQL不会采用散列值-如果这样做,将比使用原始(未散列)值更安全。

一个“共享秘密”的挑战是使用服务器上的代理来控制登录。 当客户端要连接时,服务器代理将发送一长串随机位。 客户端会将(共享的)“秘密文本”附加到此末尾,在其上使用您的SHA-1哈希并将其发送回服务器。 服务器将对文本进行相同的操作并比较字符串。 这样,每次本质上是一个不同的密码,嗅探它就没有关系。

一旦客户端通过身份验证,服务器代理将启用与mysql进程的通信。 使用libmysql(或其c#)等效项,您可以复制在“常规” mysql客户端上发生的所有事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM