gpt4 book ai didi

java - 如何为我的 java 代码检索 mysql 数据库中的 sha1 哈希值

转载 作者:可可西里 更新时间:2023-11-01 07:34:16 25 4
gpt4 key购买 nike

我在 java 中创建了对用户进行身份验证的函数。我使用 SHA1 加密数据并将其存储在 MySQL 中。然后我创建了参数查询以从 MySQL 数据库传递数据。但是我在该查询行中有一个错误。在我更改数据库中的 SHA1 值后,我删除了查询中的 SHA1 词。真的,它的工作没有任何错误。但我想从数据库中获取并检查 SHA1 加密数据。如何将数据库 SHA1 加密数据传递到我的查询中。请有人帮我解决我的问题。

public boolean authenticate(String username, String password){
Connection newConnection = null;
ResultSet newRst = null;
boolean flag = false; //return value which determines whether logged in or not
String SqlString = "SELECT * FROM user"
+ " WHERE username=? AND password=SHA1(?)"; //Error line when use SHA1()

String Username = username;
String Password = password;

String CheckUsername;
String CheckPassword;

List<String> ParametersDefined =
Arrays.asList(Username, Password);
List<String> ParametersNames = Arrays.asList("username", "password");
List<String> ParameterDataType =
Arrays.asList("String", "String");

DatabaseHandling newData = new DatabaseHandling();
try {

newConnection = newData.DataConnection();// creating the connection
newRst = newData.DataReadArg(newConnection, SqlString,
ParametersDefined, ParametersNames, ParameterDataType);
//check whether one row or more

int RowCount = 0; // to find the row count
while (newRst.next()) {
//checking whether we are getting right row
System.out.println("this is " + newRst.getString(2));

RowCount++;
}
//if the Row count is one then it check
if (RowCount == 1) {
newRst.first();
CheckUsername = newRst.getString("username");
CheckPassword = newRst.getString("password");

if ((username.equals(CheckUsername))
&& password.equals(CheckPassword)) {
userRoleId = newRst.getInt("userRoleId");
System.out.println("role = " + userRoleId);
flag = true;
}
}

} catch (Exception e) {

System.out.println("Error" + e.getMessage());
flag = false;

}

return flag;
}

工作线...

String SqlString = "SELECT * FROM user"
+ " WHERE username=? AND password=?"; //Without SHA1 String. It's working without any errors.

最佳答案

您需要更改从数据库中获取用户数据的方法。而不是“SELECT * FROM user WHERE username=?和密码=? “只需使用“SELECT * FROM user WHERE username=?” .

仅根据用户名获取用户。用户数据可用后,使用数据库值验证加密密码。

这样你就可以隔离下面的验证——

  1. 用户通过“username”的唯一值存在于系统中。

  2. 如果用户存在,验证密码。

交叉验证用户凭证是非常重要的业务逻辑,它必须在您的业务层(您的 Java 服务)中,不应分布在数据库中。

关于java - 如何为我的 java 代码检索 mysql 数据库中的 sha1 哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40017368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com