当前位置: 代码迷 >> 综合 >> android6.0 一个pin码设置-加密-存储 跟踪
  详细解决方案

android6.0 一个pin码设置-加密-存储 跟踪

热度:57   发布时间:2023-11-20 10:10:04.0

android6.0 一个pin码设置-加密-存储 跟踪。其实6.0跟7.0的都差不多,差别在于java通过binder底层的时候,6.0的是c代码写的,而7.0的是用c++同名文件写的(keystore.c/keystore.cpp)。这个在7.0还是比较多见,包括 在system/core下面的init.c,在7.0的后都改成init.cpp.

该密码保存在/data/misc/keystore/user_0/.masterkey  ,可以在adb shell之后, ls -al /data/misc/keystore/user_0/.masterkey。

在分别在看设置pin码,和删除pin码的情况下是否存在该文件 。


下面讲下,怎么从设置点击  安全-屏幕锁定方式 设定pin -设置pin码两遍- 通知 - 完成 到一直怎么pin怎么加密和存储。

完成这个button是一个设置中通用的一个按键,不在通知界面的布局中。

1.这个按键响应的ChooseLockPassword.java  onClick方法,执行                

case R.id.next_button:
            handleNext();

进到了handleNext方法,在handleNext方法中有对两次pin进行verity在第二次输入密码和第一次密码一致时候执行saveLockPassword。

  if (mFirstPin.equals(pin)) {

...

                    mLockPatternUtils.saveLockPassword(pin, mCurrentPassword, mRequestedQuality,
                            isFallback, isFallbackFor, UserHandle.myUserId());

...

2. 进到了 LockPatternUtils.java来报存密码

saveLockPassword中会做一次密码检查是否有空或是否是4位,pin只能是四位,在传pin password,类型,userHandle下去

            if (password == null || password.length() < MIN_LOCK_PASSWORD_SIZE) {
                throw new IllegalArgumentException("password must not be null and at least "
                        + "of length " + MIN_LOCK_PASSWORD_SIZE);
            }

            getLockSettings().setLockPassword(password, savedPassword, userHandle);


    private ILockSettings getLockSettings() {
        if (mLockSettingsService == null) {
            ILockSettings service = ILockSettings.Stub.asInterface(
                    ServiceManager.getService("lock_settings"));
            mLockSettingsService = service;
        }
        return mLockSettingsService;
    }

3.通过AIDL,调用的是 LockSettingsService.java service端的setLockPassword方法,

        byte[] enrolledHandle = enrollCredential(currentHandle, savedCredential, password, userId);
        if (enrolledHandle != null) {
            mStorage.writePasswordHash(enrolledHandle, userId);
        } else {
            Slog.e(TAG, "Failed to enroll password");
        }

在做writePasswordHash之前,有执行enrollCredential

GateKeeperService


下次继续。。。