大家好我正在開發我的遊戲的服務器和客戶端之間的第一個通信。很顯然,由於我從零開始,我正在仔細地預測程序的各個部分。使用JPasswordField及其getText/getPassword方法
我在看Swing API,發現JPasswordField是一個普通的InputField,但是用於密碼。
如果調用不推薦使用的方法getText()或者如果調用getPassword,則返回字符串數據。
在看了那麼我明白這不是一個好主意,使用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();
}
的問題是:是這樣的算法正確和良好的密碼的安全性?我不得不使用一個字符串從char轉換爲字節。
此外,我還返回一個哈希的字符串,是否有任何問題呢?從散列開始找到密碼應該相當困難;)
數據庫連接如何? Hsqldb允許我創建查詢,但每個查詢都是一個字符串......
我也想知道我用來計算散列的方法是否安全。 – Gianmarco