我正在尝试创建一个使用MD5哈希密码的登录/注册系统。
到目前为止,我已设法对数据库中的密码进行哈希处理,但在尝试登录时无法识别哈希密码。
可能是一个简单的修复,任何帮助都可以:)
注册JAVA
String s8 = tfPassword.getText();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(s8.getBytes());
byte [] byteData = md.digest();
StringBuilder sb = new StringBuilder(32);
for (byte b : byteData) {
sb.append(String.format("%02x", b & 0xff));
}
Statement st = con.createStatement();
st.executeUpdate("insert into Login (StaffID, UName, PWord, Staff) values('"+StaffID+"','"+s7+"','"+sb+"','Yes')");
登录JAVA:
String s2 = tfPassword.getText();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(s2.getBytes());
byte [] byteData = md.digest();
StringBuilder sb = new StringBuilder(32);
for (byte b : byteData) {
sb.append(String.format("%02x", b & 0xff));
}
Statement st = con.createStatement();
// SQL Statements
st.executeQuery("SELECT * FROM login WHERE UName= '"+s1+"' and PWord = '"+sb+"'");
答案 0 :(得分:0)
为了未来SOuls的利益,他们在寻找关于“MD5哈希密码”的答案时发现了这个问题:
对密码使用MD5哈希已损坏。不要这样做。
https://security.stackexchange.com/questions/19906/is-md5-considered-insecure
虽然我们讨论的是安全性问题,但我们也鼓励使用带有绑定占位符的预准备语句,而不是编写易受SQL注入攻击(或看起来容易受攻击)的动态SQL。
看起来问题根本不是关于密码的MD5。看起来它真的是一个更简单的问题:
问:如何判断执行的SELECT语句是否返回了(ny)行?
答:如果SQL语句为executeQuery
,则ResultSet
方法返回SELECT
对象。使用next
方法从结果集中检索下一行。
这样的事情:
Statement st = null;
ResultSet rs = null;
try {
st = con.CreateStatement();
rs = st.executeQuery("SELECT '42' AS fortytwo");
while( rs.next() ) {
String foo = rs.getString("fortytwo");
// System.out.println("yay! we got another row!");
}
} catch (SQLException e) {
//
} finally {
if (rs != null) { rs.close(); }
...