我正在尝试创建一个使用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+"'");
1条答案
按热度按时间yzxexxkh1#
对于那些在寻找“md5 hash password”答案时发现这个问题的未来灵魂来说:
对密码使用md5哈希是错误的。别这么做。
https://security.stackexchange.com/questions/19906/is-md5-considered-insecure
在讨论安全性的同时,我们还将鼓励使用带有绑定占位符的准备语句,而不是编写易受sql注入攻击的动态sql。
看起来问题根本不是关于密码的md5。看起来这真的是一个简单得多的问题:
问:如何判断执行的select语句是否返回了(ny)行?
a:那家公司
executeQuery
方法返回ResultSet
如果sql语句是SELECT
. 使用next
方法从结果集中检索下一行。像这样: