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メソッドは、指定した入力のみに依存しますか、それとも実行しているマシンにも依存しますか?
もしそうなら、インストール中に余分なコードを実行せずに、このセキュリティメカニズムを使用して最初のインストールのデフォルトパスワードを保存するにはどうすればよいですか?
ありがとう!