私は自分の小さなプログラムを作成してユーザー名/パスワードを作成し、AESで暗号化してから、暗号化されたパスワード、およびキーをMySQLデータベースに格納します。私の今後の計画は、データベースからこの情報を取得し、それを解読してデータベースに対するログイン情報をチェックすることによって、ユーザが「ログイン」できるようにすることです。秘密鍵、暗号化されたパスワードをMySQL経由でJDBCに保存しようとしています
現在、私はすべての暗号化/復号化機能をJavaで動作させています。私はさまざまな入力を使用してそれをテストし、メソッドがすべて正しく動作することを知っています。私が実行している問題は、この情報をMySQLデータベースに格納することです。データベースに接続してSELECTクエリを実行することはできますが、INSERT文を使用して情報を格納するとエラーが発生します。ここで
は私のMySQLデータベースのセットアップです:
public static void main(String[] args) throws Exception {
String plainText = "test";
SecretKey secKey = getSecretEncryptionKey(); // working correctly
byte[] cipherText = encryptText(plainText, secKey); // working correctly
String decryptedText = decryptText(cipherText, secKey); // working correctly
byte[] secKey2 = secKey.getEncoded(); // necessary??
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Test?useSSL=false","****","****"); // user/pass commented out
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("use Test;");
stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO Accounts (username, password, key) VALUES ('test1', '"+cipherText+"', '"+secKey2+"');");
con.close();
} catch(Exception e){
System.out.println(e);
}
}
私が取得エラー:私が使用
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key) VALUES ('test1', '[[email protected]', '[[email protected]')' at line 1
スキーマここ
mysql> SHOW COLUMNS FROM Accounts;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(45) | NO | UNI | NULL | |
| password | blob | NO | | NULL | |
| key | blob | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
は、問題のコードです私のデータベースの "テスト"と呼ばれます。 「テストの使用」クエリが機能しているようです。
上記の例では、「test1」はユーザー名、cipherTextはハッシュされたパスワード、secKey2はバイト配列にエンコードされたキーです。
キーをバイト配列に変換してblobとして格納するのが最善だと読んでいるので、キーをバイト配列に変換する場合と変換しない場合の両方でこれを試みました。私はVARCHARとして 'password'と 'key'フィールドを使ってこれを試しました。私は彼らが正しく動作することを知っているので、私は暗号化/復号化のためのメソッドを含めていない、問題は、データベースに情報を格納しています。
ご協力いただければ幸いです!
こんにちは。あなたが得ているエラーに関するより具体的な情報を教えてください。 – Maurice
私が得ているエラーは、Javaコードのすぐ下に含まれています。私はEclipseを使用しています。これがエラー出力として表示される唯一のものです。 – JAM1295
パスワードを暗号化せずにハッシュする必要があります。 – EJP