有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何验证用户身份?(Android/Java/Symfony)

我正在开发一款需要认证的Android应用程序。但是,现有的web应用程序(使用Symfony)有帐户,我必须重新使用相同的帐户来验证我的用户

在数据库中,我有一些基本信息:用户名、salt、加密密码、加密类型(sha1)

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

如果有人能帮我解决这个问题

非常感谢


共 (2) 个答案

  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;
    }
    
  2. # 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);
    }
    

    您需要知道哪些设置用于在数据库中生成加密密码