如何在Android

时间:2015-05-28 10:43:01

标签: android encryption locking

我开发了一个Android应用程序,我想为其使用实现密码。

  1. 所有用户的密码都是不变的。
  2. 知道密码的人只能访问该应用。
  3. 此处密码由我(应用程序开发人员)设置。
  4. 现在我对实施这个想法感到困惑。 我想我需要一个文件,我可以存储加密密码读取文件进行验证。但问题是我可以用带有加密密码的文件发送我的应用程序。 或者我应该使用SQLite吗?

2 个答案:

答案 0 :(得分:0)

您提出的标准可以通过以下方式完成,您不需要任何外部文件来保护您的密码以加密安全:

  

1)所有用户的密码都是不变的。

在项目中的任何地方声明:

public static final String password = "Constant Password which will set by me.";

因此,每当用户尝试使用您的应用时,他都会输入the password,您将与password匹配。

  

2)知道密码的人只能访问该应用程序。

告诉“人”密码是什么:

password = "Constant Password which will set by me."
  

3)此处密码由我(应用程序开发人员)设置。

是的,你已经设置好了!每次发布新版本时,都可以更改它!

免责声明:请勿使用您的“想法”!如果您的任何用户泄露了您的密码,整个世界都可以访问您的应用程序!

建议:出于安全考虑,请使用HASHing进行基于密码的登录。让用户可以自由创建自己的密码。您可以通过某些HASH mechanism将每个用户password存储在您的数据库中。

答案 1 :(得分:-1)

一个警告,用于在登录过程中想要实施密码检查机制的任何人:如果您反编译的apk泄漏了进行通过检查的方法名称,则它将通过将钩子绑定到您的方法并更改返回值,攻击者可以轻松绕过您的通过检查。使自己熟悉Xposed之类的框架。

假设我们的通过检查方法名称为:

  

isPasswordCorrect

,我们的活动名称是:

  

PasswordActivity

我们可以使用 Xposed 绕过返回值,如下所示:

@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
    final String packageName = "your.package.name";
    if (!lpparam.packageName.equals(packageName)) { return; }

    final String passwordActivity = packageName + ".PasswordActivity";
    final String isPasswordCorrect = "isPasswordCorrect";

    XposedBridge.log("[+] Hooking method");

    findAndHookMethod(passwordActivity, lpparam.classLoader, isPasswordCorrect, String.class, new XC_MethodHook() {
        @Override
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
            param.setResult(true);
            XposedBridge.log("[+] Changed result of " + isPasswordCorrect + " to true");
        }
    });
}

欢呼!