锁屏密码

1、密码存放在的位置
Android 中的锁屏密码是存储在系统文件的数据库中的。

android 5.0 下 数据库存放在(android 8.0 小米系统已经不是这个目录了)

/data/system/locksetting.db

当系统在校验用户输入的密码时,是从这个位置拿到的。

2、密码的加密方式

数字密码 一般只让设置 4 位,为了保证手机的安全,android 系统对用户的设定做了这样的加密方式:

  • 首先从系统中拿到要 加密需要的 salt,有了这个salt 就能够增大破解密码的难度。
  • 将用户设定的密码 + 第一步拿到的 salt 值,分别进行 sha-1 和 md5 的操作
  • 将上方的 sha-1 和 md5 分别转成 hex 值之后,在此拼接,得到的就是最终保存到数据库真实的密码。

3、怎么拿到 salt 呢?

android 本身的系统当然能够很轻松的拿到 salt,但是如果自己想去拿的话,有两种方式

  • salt 其实也是存储在 系统的数据库中的,所以直接去拿,是可以的


  • 通过反射的方式去拿,反射的方法可以参考如下代码

      try{
            Class clazz1=Class.forName("com.android.internal.widget.LockPatternUtils");
            Object lockUtils=clazz1.getConstructor(Context.class).newInstance(this);
            Class lockUtilsClazz=lockUtils.getClass();
            Method getSaltM=lockUtilsClazz.getDeclareMethod("getSalt",int.class);
            Object saltObj=getSaltM.invoke(lockUtils,0);
            log.i("guaju","salt:"+saltObj);  
          }
      catch(Exception e){
             Log.i("guaju","err"+Log.getStackTraceString(e));
        }  
    

这个拿到的 salt 值,就是在数据中拿到 salt (数据库中时 long类型)转成 hex之后的值。

你可能感兴趣的:(锁屏密码)