2

我正在用 Java 编写一个访问控制程序,该程序使用JPasswordField. 由于该jpasswordfield.getPassword()方法以字符形式返回值,因此我需要知道如何使用preparedstatement. 我正在使用 MYSQL 字段password char[100]来存储密码。

请帮忙。

4

2 回答 2

0

使用一些密码加密算法来保存密码,这将是一个很好的做法,谷歌它的详细信息,

于 2012-04-05T07:20:26.617 回答
0

我做了一个简单的例子,使用准备好的语句将 char 数组存储在数据库中。我使用 Java DB 而不是 MySQL,因为它包含在 JDK (jdk1.7.0/db/lib/derby.jar) 中,对于这个例子来说应该没关系。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class Example {
    public static void main(String[] args) throws SQLException {
        try (Connection connection = DriverManager.getConnection("jdbc:derby:memory:sampleDB;create=true");
             Statement statement = connection.createStatement()
        ) {
            char[] pw = "password".toCharArray();
            statement.execute("create table sample(pw char(10))");

            try (ResultSet resultSet = statement.executeQuery("select * from sample");
                 PreparedStatement preparedStatement = connection.prepareStatement("insert into sample values (?)")
            ) {
                for (int i = 1; i <= 10; i++) {
                    preparedStatement.setString(1, new String(pw) + i);
                    preparedStatement.execute();                    
                }

                while (resultSet.next()) {
                    System.out.println(resultSet.getString(1));
                }
            }
        }
    }
}

正如其他人已经说过的那样,您不应该将密码以明文形式存储在数据库中。相反,您应该存储它的哈希值(SHA-1 Hash in Java)。

于 2012-04-09T10:37:40.413 回答