大家好,我正在研究我的游戏服务器和客户端之间的第一条通信。显然由于我是从零开始的,所以我对程序的每个部分都进行了仔细的投影。
我正在查看 Swing API,发现 JPasswordField 是一个普通的 InputField,但用于密码。
如果调用了已弃用的方法 getText(),则返回一个字符串,如果调用 getPassword,则返回一个字符数组。
阅读 SO 我明白使用 getText 不是一个好主意,也不是类似的东西
String password = String.valueOf(passwordField.getPassword());
因为这样做我正在创建一个可以长时间留在内存中的字符串。
我试图创建的是可以在不使用字符串的情况下转换该密码的东西,我创建了这个:
public static String digest(char[] in) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance("SHA-256");
ArrayList<Byte> list = new ArrayList<Byte>();
for(int i = 0; i<in.length; i++){
String ch = String.valueOf(in[i]);
byte[] b = ch.getBytes();
for(int j = 0; j<b.length;j++){
list.add(b[j]);
}
}
byte[] inputInByte = new byte[list.size()];
for(int i =0;i<list.size();i++){
inputInByte[i] = list.get(i);
}
md.update(inputInByte);
byte byteData[] = md.digest();
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
String hex = Integer.toHexString(0xff & byteData[i]);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
问题是:这个算法是否正确并且有利于密码的安全性?我必须使用字符串从字符转换为字节。
我还返回一个散列字符串,这有什么问题吗?从哈希开始找到密码应该是相当困难的;)
数据库连接怎么样?hsqldb允许我创建查询,但是每个查询都是一个字符串……