我正在尝试实现一个登录屏幕,您的所有输入都由 SHA 512 加密,稍后对该功能进行一些小调整(反转字符串,扩展长度)。对于我的用户名,加密效果很好,但另一方面,无论我输入什么,我的密码都会给我相同的结果。
public static String password_encrypt(String input) {
try {
String password_ = input;
int iterations = 250000;
String salt = "salt";
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
char[] passwordChars = password_.toCharArray();
KeySpec spec = new PBEKeySpec(passwordChars, salt.getBytes(), iterations, 256);
SecretKey key = factory.generateSecret(spec);
byte[] passwordHash = key.getEncoded();
SecretKey secret = new SecretKeySpec(key.getEncoded(), "AES");
input = secret.toString();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvalidKeySpecException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return input;
}
然后我检查一个数组是否有一个可以放置信息的地方,如果有一个存储在那里。
for (int i = 0; i < username.length; i++) {
System.out.println("username " + username[i]);
if (name.equals(username[i])) {
System.out.println("Dieser Username ist bereits vergeben!");
break;
}
if ("empty".equals(username[i]) || null == username[i]) {
username[i] = name;
stelle = i;
System.out.println("Username wurde vergeben");
break;
}
else if (name.equals(username[i])) {
System.out.println("1234");
}
}
数组 username[] 和 password[] 由我的构造函数填充为“空”或 null。
我的主要问题是:无论密码输入是什么,我都会得到相同的密钥:javax.crypto.spec.SecretKeySpec@fffea4cc
如果我只是比较字符串以确定它是否正确,这会给我带来很大的安全漏洞......
达令说
相关分类