Я пытаюсь использовать PBKDF2 для хранения паролей. Затем я использую код с хэшами паролей, которые он сгенерировал на другой машине.
Я использую этот метод для шифрования своих паролей:
public String pwdEncodePBKDF2(String unencryptedPassword,String salt)
{
try
{
if(salt.isEmpty())
{
salt = generateSalt(SystemSecurity.SALTLENGTH);
}
String algorithm = "PBKDF2WithHmacSHA1";
int derivedKeyLength = 160;
int iterations = 1000;
KeySpec spec = new PBEKeySpec(unencryptedPassword.toCharArray(), salt.getBytes(), iterations, derivedKeyLength);
SecretKeyFactory f = SecretKeyFactory.getInstance(algorithm);
StringBuffer hexString = new StringBuffer();
byte[] mdbytes = f.generateSecret(spec).getEncoded();
for (int i=0;i<mdbytes.length;i++)
{
hexString.append(Integer.toHexString(0xFF & mdbytes[i]));
}
String hashedPassword = hexString.toString();
return hashedPassword + salt;
}
catch(Exception e)
{
e.printStackTrace();
throw new RuntimeException("Error computing hash: "+e.getMessage());
}
}
Он отлично работает, но когда я запускаю его на другом компьютере (т.е. устанавливаю свой проект на другом компьютере, с базой данных, которая имеет зашифрованный пароль по умолчанию с компьютера, на котором я запускаю изначально), я вижу, что с той же солью и пароль это дает мне другое шифрование. Насколько я понимаю, методы SecretKeyFactory зависят только от входных данных, которые я им даю, или они также зависят от машины, на которой я работаю?
Если да, то как я могу сохранить пароль по умолчанию для первой установки с помощью этого механизма безопасности без запуска дополнительного кода во время установки?
Спасибо!