Java - 从sql数据库中保存和/或检索字节

时间:2017-12-11 07:13:29

标签: java mysql sql arrays

This is my java code which includes the sql which is executed

This is the sql code that originally created the table

我知道此刻,密码只是保存在数据库中, 但我想将它保存为加密字节数组(例如[@ 7aC& s])。 我将密码设置为varbinary,但是当我尝试使用getBytes()方法将密码保存为byte []时,它将[@ 7aC& s检索为字符串而不是字节[]。 我想这样做,然后我可以使用新的String(byte [])将其解密回String。

我怎么能这样做,或者根本不能这样做? 修改 如果你想知道新的MySQLConnnector();是的,这里是: MySQLConnector.java

2 个答案:

答案 0 :(得分:0)

首先,您不应该连接查询和一些用户输入。这是SQL注入的一扇门。您需要使用PreparedStatement来安全地插入数据(阅读链接的页面以对该部分进行全面审核)。

PreparedStatement提供setBytes方法,允许您将byte[]作为值插入。

  

将指定参数设置为给定的Java字节数组。驱动程序在将数据发送到数据库时将其转换为SQL VARBINARY或LONGVARBINARY(取决于相对于驱动程序对VARBINARY值的限制的参数大小)。

这是一个使用虚拟表的快速和未经测试的代码

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

答案 1 :(得分: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,它为这些东西提供了经过测试的代码。