第3章 PIN码设置、加密、存储

第3章 PIN码设置、加密、存储

1.前提介绍:该密码保存在/data/misc/keystore/user_0/.masterkey,可在adb shell后,ls –al /data/misc/keystore/user_0/.masterkey查看文件存在与否。

下面讲述的是,从设置点击 安全-屏幕锁定方式,设定pin-设置pin码,通知-完成,到pin如何进行加密和存储的。完成这个button是一个设置中通用的一个按键,不再通知界面的布局中。

2. 这个按键响应ChooseLockPassword.java的onClick方法,执行以下代码:

图3.1执行onclick()

进入handleNext()方法,当确认密码正确时,执行startSaveFinsh操作

 

图3.2执行startSaveAndFinsh()

看一下startSaveFinsh()函数的具体执行过程,在该过程中会调用SaveAndFinishWorker类的start方法。

 

图3.3在该过程中会调用ChooseLockPassword.java文件中的SaveAndFinishWorker的start()方法

3. 进入ChooseLockPassword.java文件中的SaveAndFinishWorker类里面执行start()方法,看一下start方法的详细内容。

SaveAndFinishWorker继承于SaveChosenLockWorkerBase类,在SaveAndFinishWorker的satrt方法的最后会执行staart(),这个start是SaveChosenLockWorkerBase类里面的方法。

 

图3.4 ChooseLockPassword.java文件的SaveAndFinishWorker类里执行start()

  1. 进入SaveChosenLockWorkerBase类查看具体的start方法。在该start方法中会调用ChooseLockPassword 类的saveAndVerifyInBackground()方法。

图3.5在该start方法中会结束ChooseLockPassword 的saveAndVerifyInBackground()

  1. ChooseLockPassword 类的saveAndVerifyInBackground(),在这个方法里面会调用LockPatternUtils.java文件的saveLockPassword()方法

 

图3.6调用LockPatternUtils.java文件的saveLockPassword()方法

  1. 看具体的LockPatternUtils.java文件的saveLockPassword()方法。进入该方法来保存密码。通过getLockSettings()间接调用LockSettingsService的setLockCredential方法。

saveLockPassword中会做一次密码检查是否有空或者是否是4位,pin只能是4位,再传pin password,类型,userhandle下去。

图3.7通过getLockSettings()间接调用LockSettingsService的setLockCredential方法

 

a. LockPatternUtils.java文件的getLockSettings()方法。

(在LockSettingsService类的onstart方法中有把mLockSettingService赋值给lock_settings,然后在LockPatternUtils中对其进行调用)。

实际上是:通过AIDL,调用的是 LockSettingsService类的service端的setLockCredential()方法。

图3.8getLockSettings调用的是 LockSettingsService类的lock_settings

b. 通过AIDL,调用的是 LockSettingsService类service端的setLockCredential方法。LockSettingsService类的onstart方法中有把mLockSettingService赋值给lock_settings,然后在第8步被调用了。

图3.9 LockSettingsService类中的start方法

  1. LockSettingsService.java类。

在第7步中,LockPatternUtils.java文件的setLockCredential()方法中有如下代码:getLockSettings().setLockCredential(password, CREDENTIAL_TYPE_PASSWORD, savedPassword,  requestedQuality, userHandle)

注意:验证都是经过LockSettingsService,然后再到GateKeeper。

 

所以:通过AIDL,调用的是 LockSettingsService.java service端的setLockCredential方法。

setLockCredential方法会调用setLockCredentialInternal()方法。

 

  1. 看一下LockSettingsService的setLockCredential方法:

 

 

图3.10调用setLockCredentialInternal()方法

 

  1. 看一下LockSettingsService的setLockCredentialInternal()方法,在做writePasswordHash之前,有执行enrollCredential。

 

图3.11把pin存储起来

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值