Я пытаюсь реализовать экран входа в систему, где все ваши входы зашифровываются с помощью 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");
}
}
for (int j = 0; j < password.length; j++) {
System.out.println("Passwort " + password[j]);
if ("empty".equals(password[j]) || null == password[j]) {
System.out.println("Passwort wurde vergeben");
password[j] = input_;
stelle_pw = j;
break;
}
else if (input.equals(password[j])) {
System.out.println("123");
}
}
Мое имя пользователя [] и пароль [] были заполнены пустым или нулевым моим конструктором.
Моя главная проблема: независимо от того, какой ввод пароля, я получаю один и тот же ключ: javax.crypto.spec.SecretKeySpec@fffea4cc
Это дает мне большую утечку безопасностиесли я просто сравниваю строки, чтобы решить, является ли это правильным ...
Little Disclamer: некоторые функции или переменные сделаны с _, потому что я дислексик.Пожалуйста, не убивайте меня за то, что вы не используете соглашение об именах.T