如何验证用户? (机器人/爪哇/ Symfony的)

时间:2015-07-21 07:55:35

标签: java android security symfony

我正在开发需要身份验证的Android应用。但是,现有的Web应用程序(使用Symfony)和帐户,我必须重复使用相同的帐户来验证我的用户。

在数据库中,我有基本知识:username,salt,encryptedPassword,encryption_type(sha1)......

问题是我不知道如何通过使用这些信息来验证我的用户。

如果有人可以帮我解决这个问题......

非常感谢!

2 个答案:

答案 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;
}