2017-12-11 4 views
-1

This is my java code which includes the sql which is executedジャワ - 保存および/またはSQLデータベース私は、現時点では知っている

This is the sql code that originally created the table

からバイトを取得し、パスワードはちょうどそれが、データベースに あるとして保存されますが、私はそれをしたいです暗号化バイト配列として保存することができます(例:[@ 7aC & s)。 パスワードはvarbinaryとして設定されていますが、パスワードをgetBytes()メソッドを使用してバイト[]として保存しようとすると、[@ 7aC &がバイトではなくStringとして取得されました。 私はこれを行いたいので、新しいString(byte [])を使用してそれを解読してStringに戻すことができます。

これを行うにはどうすればよいですか、まったくできませんか?
編集: 新しいMySQLConnnector();それはここです: MySQLConnector.java

+0

** SQLインジェクションを防止するために 'PreparedStatement'を使う方法を見てください!! **他の重要な点は、あなたのコードを画像として投稿しないで、コードを[mcve]として貼り付けてください。 – AxelH

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557と受け入れられた回答 –

答えて

0

まず、クエリとユーザー入力を連結しないでください。これはSQLインジェクションのためのオープンドアです。安全にデータを挿入するには、PreparedStatementを使用する必要があります(リンクされたページを参照して、その部分の完全なレビューを得てください)。

PreparedStatementsetBytesの方法では、byte[]を値として挿入できます。

指定されたパラメータを、指定されたJavaバイト配列に設定します。ドライバは、これをデータベースに送信するときに、これをSQL VARBINARYまたはLONG​​VARBINARY(ドライバのVARBINARY値の制限に関連する引数のサイズに応じて)に変換します。ここで

ダミーテーブルを使用して迅速かつ未テストコードです。

String sql = "insert into mytable(bytearray) values (?)"; 
PreparedStatement ps = connection.prepareStatement(sql); 
ps.setBytes(1, "MyPassword".getBytes()); 
ps.execute(); 
0

PreparedStatementを作成し、setBytes(https://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html#setBytes-int-byte:A-)を使用する必要があります。しかし、私はあなた自身を圧延する前にセキュリティについてお読みになることをお勧めします。 25バイトはパスワードを省略する方法であり、あなたのコードはSQLインジェクションに広く開いています。例えば、https://projects.spring.io/spring-securityを見てください。これは、これらのことをテストしたコードを提供します。

関連する問題