我已经存储密码的类(我将不仅仅是密码才能加入更多的东西)称为数据:Java:如何使对象写入文件对人类来说是不可读的?
import java.io.Serializable;
public class Data implements Serializable{
public String password = "";
}
作为测试我跑这两个:
private static File datafile = new File("data.src");
public static void checkDatafile() {
try {
Data data = new Data();
data.password = "Newwww";
if (!datafile.exists()) {
datafile.createNewFile();
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream(datafile));
oos.writeObject(data);
oos.flush();
oos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static Data loadData(Data data) {
try {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream(datafile));
data = (Data) ois.readObject();
ois.close();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return data;
}
它写入和读取完美,但是当我在记事本中打开它data.src人类是便于阅读的密码是不是安全的,这是data.src的输出:
ャ・ sr data.Data克ラ淕6J・ L passwordt Ljava/lang/String;xpt Newwww
密码很容易看到并且不安全,在写入文件时有没有办法对对象进行加密/编码以便人类无法读取?
此外,我宁愿坚持标准的Java库,然后下载和使用其他人。
我建议不要存储密码。最好存放它们的哈希值。这允许您验证输入的密码是否正确,而不需要以可用于在合理时间内恢复它们的格式存储它们。 –
是的,只需对密码进行加密,就可以通过社交工程和反向工程代码等“软”手段恢复密码。没有负责任的网站存储密码,无论是否加密。你把它们打散 - 用一个好的,腌制的,难以记忆的散列 - 并存储它。这样,你甚至无法在传票或酷刑下泄露密码。 –
@LeeDanielCrocker如果在运行时被问到,使用散列还可以更改密码吗? – FOD