gpt4 book ai didi

java - 使用 JPasswordField 及其 getText/getPassword 方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:14 28 4
gpt4 key购买 nike

大家好,我正在处理游戏服务器和客户端之间的第一个通信。显然,由于我是从零开始的,所以我正在仔细规划程序的每个部分。

我在查看 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();
}

问题是:这个算法是否正确并且有利于密码的安全性?我不得不使用 String 将 char 转换为 byte。

我还返回了一个散列字符串,这有什么问题吗?从哈希开始应该很难找到密码;)

数据库连接如何? Hsqldb 允许我创建查询,但每个查询都是一个字符串......

最佳答案

使用 SHA-256 摘要是一种哈希方法,而不是密码方法。它就像一个指纹。你能在不测试每个人(60 亿)指纹的情况下从他的指纹中找出一个人吗?不,例如,它曾经将密码存储在 php 的数据库中。我们只存储通行证的哈希值,当用户想要连接时,我们计算新输入的密码哈希值,并将其与数据库的哈希值进行比较。如果数据库被黑客攻击,这可以防止用户窃取密码。但是您无法从哈希中获取密码。我希望我回答了你的问题。顺便说一下,考虑使用 apache 库作为消息摘要,它更容易而且我认为更安全

关于java - 使用 JPasswordField 及其 getText/getPassword 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18337085/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com