我正在开发需要身份验证的Android应用。但是,现有的Web应用程序(使用Symfony)和帐户,我必须重复使用相同的帐户来验证我的用户。
在数据库中,我有基本知识:username,salt,encryptedPassword,encryption_type(sha1)......
问题是我不知道如何通过使用这些信息来验证我的用户。
如果有人可以帮我解决这个问题......
非常感谢!
答案 0 :(得分:2)
根据加密算法,您可以执行以下操作:
public final boolean authenticate(String attemptedPassword, byte[] encryptedPassword, byte[] salt) throws NoSuchAlgorithmException, InvalidKeySpecException {
String algorithm = "PBKDF2WithHmacSHA1";
int derivedKeyLength = 160;
int iterations = 20000;
KeySpec spec = new PBEKeySpec(password.toCharArray(), salt, iterations, derivedKeyLength);
SecretKeyFactory f = SecretKeyFactory.getInstance(algorithm);
byte[] encryptedPassword = f.generateSecret(spec).getEncoded();
return Arrays.equals(encryptedPassword, encryptedAttemptedPassword);
}
您需要知道在数据库中使用了哪些设置来生成加密密码。
答案 1 :(得分:1)
我终于成功了!我已经通过PHP类" PluginsfGuardUser"分析了Symfony检查密码的方式。
public final boolean authenticate(User user)
MessageDigest md = MessageDigest.getInstance(SHA1);
byte[] saltPassword = (user.getSalt() + user.getPassword()).getBytes();
byte[] encryptedPassword = md.digest(saltPassword);
String pass = byteArrayToHexString(encryptedPassword);
if (pass.equals(user.getDbPassword()))
{
return true;
}
else
{
return false;
}
}
private String byteArrayToHexString(byte[] array) {
String result = "";
for (int i = 0; i < array.length; i++) {
result
+= Integer.toString((array[i] & 0xff) + 0x100, 16).substring(1);
}
return result;
}