我知道此刻,密码只是保存在数据库中, 但我想将它保存为加密字节数组(例如[@ 7aC& s])。 我将密码设置为varbinary,但是当我尝试使用getBytes()方法将密码保存为byte []时,它将[@ 7aC& s检索为字符串而不是字节[]。 我想这样做,然后我可以使用新的String(byte [])将其解密回String。
答案 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,它为这些东西提供了经过测试的代码。