本文共 4601 字,大约阅读时间需要 15 分钟。
Android 的图案密码解锁,通过手势连接 3 * 3 的点矩阵绘制图案表示解锁密码。基于 。
private static final int REQ_CREATE_PATTERN = 1;Intent intent = new Intent(LockPatternActivity.ACTION_CREATE_PATTERN, null, your-context, LockPatternActivity.class);startActivityForResult(intent, REQ_CREATE_PATTERN);
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQ_CREATE_PATTERN: { if (resultCode == RESULT_OK) { char[] pattern = data.getCharArrayExtra( LockPatternActivity.EXTRA_PATTERN); ... } break; } }}
private static final int REQ_ENTER_PATTERN = 2;char[] savedPattern = ...Intent intent = new Intent(LockPatternActivity.ACTION_COMPARE_PATTERN, null, your-context, LockPatternActivity.class);intent.putExtra(LockPatternActivity.EXTRA_PATTERN, savedPattern);startActivityForResult(intent, REQ_ENTER_PATTERN);
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQ_ENTER_PATTERN: { switch (resultCode) { case RESULT_OK: // The user passed break; case RESULT_CANCELED: // The user cancelled the task break; case LockPatternActivity.RESULT_FAILED: // The user failed to enter the pattern break; case LockPatternActivity.RESULT_FORGOT_PATTERN: // The user forgot the pattern and invoked your recovery Activity. break; } int retryCount = data.getIntExtra( LockPatternActivity.EXTRA_RETRY_COUNT, 0); break; } }}
本项目较为简单,总体设计略过,具体实现请参考下面的分析。
LockPatternActivity
类负责所有外部请求,根据ACTION_CREATE_PATTERN
ACTION_COMPARE_PATTERN
ACTION_VERIFY_CAPTCHA
等Action
选择操作模式,加载设置后初始化LockPatternView
,在用户完成操作后退出并返回结果。
主要方法说明:
LockPatternView
类主要是显示解锁的图形界面,在用户操作的时候显示连线与动画,用户操作完成后根据结果做提示。
添加图形点
getRowHit(float y)
与getColumnHit(float x)
返回的行、列判断是否是新的图形点,如果是返回新点,否则返回 null。checkForNewHit(float x, float y)
返回当前图形点,如图形点非 null,继续判断 pattern list 是否为空,如果不为空就把 last 与当前的图形点之间同一直线的其他点加入 list,然后把当前点加入 list。按下事件
detectAndAddHit(float x, float y)
并判断其返回值发送通知与局部刷新。移动事件
弹起事件
图形摘要并加密
List<LockPatternView.Cell> pattern
把pattern list进行信息摘要,然后使用SHA-1算法加密,返回加密的摘要。android-lockpattern默认的加密存储流程与Android系统的图形解锁是一致的,以Android系统为例来破解图形锁。
首先获取系统图形锁加密摘要文件
adb pull /data/system/gesture.key gesture.key
参考4.2.3
中的图形摘要规则,然后我写了一个python脚本,生成了9个点所有组合的摘要字符串,同时再生成对应的SHA-1 HEX,这个字典也就57m。
把gesture.key
中的加密字符串在字典中反查即可得出图形锁的原始信息摘要,然后就可以按步骤画图解锁了。
转载地址:http://huici.baihongyu.com/