我尝试将加密的“密码文本”保存到SQL Server 2008r2数据库时遇到问题。当我从java-netbeans中保存时,sql收到“ ?????”在文本字段上,我发现这是因为还是unicode ...我正在使用BLOWFISH加密(该类工作完美),但由于我从数据库“ ????”获得而无法解密它文字而非原始文字(密码)
一位朋友被告知要在数据库上使用“ varbinary”而不是“ varchar”,但您不知道该怎么办吗:S
谢谢
public boolean SavetoDB() {
DATABASE_CONNECTION con = new DATABASE_CONNECTION();
cn = con.conectar();
boolean resp = false;
try {
String sql = "INSERT INTO cliente(usuario, pass, Nombre, Apellido, Edad,"
+ "genero, Direccion, Telefono, Celular, img_name,tipo_cuenta, ipaddress, puerto,segundos,minutos,horas)"
+ " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,?,?,?,?,?)";
PreparedStatement cmd = cn.prepareStatement(sql);
cmd.setString(1, usuario);
cmd.setString(2, pass);
cmd.setString(3, Nombre);
cmd.setString(4, Apellido);
cmd.setInt(5, Edad);
cmd.setString(6, genero);
cmd.setString(7, Direccion);
cmd.setInt(8, Telefono);
cmd.setInt(9, Celular);
cmd.setString(10, nombrearch);
cmd.setString(11, tipo_cuenta);
cmd.setString(12, ip);
cmd.setString(13, puerto);
cmd.setInt(14, 1);
cmd.setInt(15, 0);
cmd.setInt(16, 0);
////////////////////////////////////////////////////////
///////////////////////////////////////////////////////
if (!cmd.execute()) {
resp = true;
}
cmd.close();
cn.close();
} catch (Exception ex) {
System.out.println("Error: " + ex.getMessage());
}
return resp;
}
SQL表:
创建表cliente(
usuario varchar(15)不为null的主键,
通过varchar(90)不为null,
Nombre varchar(32)不为null,
Apellido varchar(32)不为null,
Edad int不为null,
普通varchar(15)不为null,
Direccion varchar(32),
Telefono int,
整数int
img_name varchar(32)不为null,
tipo_cuenta varchar(15)不为null,
fecha_creacion日期,
ipaddress varchar(20)不为null,
Puerto varchar(30)不为null,
segundos int不为null,
minutos int不为null,
horas int不为null,
)
最佳答案
尝试在数据库中保存密码文本字节的md5 / sha摘要。当您需要检查密码时,请计算输入密码的摘要,然后与数据库中的密码进行比较。
关于java - 从数据库解密Unicode文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12867802/