手势密码是手机端比较常用的一种身份验证方式,主要用来验证身份,保护隐私数据。本篇文章将用流程图及页面流来描述开启设置,关闭,重置手势密码和手势密码登录。
手势密码的使用场景
当我们想做一款收款工具,这其中当然得涉及到跟钱有关的事情,为了商户的账户安全,我们的做法是用户每次打开app,都需要输入账号密码才能登录。试想这样几个场景:
场景一:
我是商家,现在我的pos机系统(这个是用来配合pc端的收款系统使用)出故障了,怎么办,这时我需要掏出我的手机,打开app,输入密码,收款。收完了,关闭手机。顾客这么多,都在等着付款,我还需要输入复杂的密码,进入程序也太慢了吧。
场景二:
收完款了,我退出了程序。过了一会,新来了一位顾客,我打开程序继续收款,啊~我又需要输入密码了,好麻烦啊。
场景三:
一天工作结束了,看看我今天的收单数据吧。什么东西啊,我就是想看看收单数据,又要输入密码。
三个场景,我们总结出来共同的缺点:慢、麻烦。
慢,我怎么解决呢。以下是我的大致想法。
A: 用手势密码吧,至少速度上比输入密码快。
B: 这样也太草率了吧,有没有更快的方法?
A: 那就不使用密码,直接进入app。
B: 这样是不是不太安全啊,这可是涉及到商户的钱啊
A: 怕啥,支付宝不是也涉及到钱吗,不还是可以直接进入么。你想想他们是怎么解决这个问题的,他们是在涉及到钱的最后一个环节才添加密码功能
B: 对哦,我也许也可以借鉴一下。我再想想,啊~不行,支付宝和我们的产品面向的用户群及目的不一样啊。支付宝虽然涉及到钱,然而却不是一款使用频次很高的收款软件啊。如果我们的产品总是在最后一步开启密码功能,在这么高的使用频率下,效率不是提高,而是成倍的降低。
A: 是啊,还是放在第一步进入时开启密码吧,这样更合理。还有没有其他更快的解决办法呢?
B: 额,指纹解锁?好像还不太广泛适用。还有别的什么?算了,想不出来…
麻烦,怎么解决呢?同理了。
好了,既然初步定了这么个功能,是该考虑怎么去实现了。
手势密码存在本地还是存在服务器呢?
存在本地?当然可以,给它二次加密。只是我通过手势密码登录后,我的数据怎么得来呢,毕竟我没有登录账号密码啊。所以,咋办呢。让我的账号密码也缓存在本地,同时设置我的清除缓存功能不去干掉它,这样不就可以了吗。不安全?那再来个二次加密吧。
存服务器,当然也可以。我们让一个账号匹配两个密码呗,通过缓存我的账号,手势密码登录,我也可以照样获得我的账号数据,同时还不用将我的密码存在本地。
我使用的方法是存服务器,毕竟如果将两个密码都换存在本地,我还是觉得不安全。所以在这里我也只讲述客户端与服务器的逻辑交互了,存在本地的话其实也同理,只不过是客户端直接去做判断。
手势密码涉及到哪几个环节?
设置手势密码
修改手势密码
清空手势密码
既然知道了这几个环节,我们就该整理出实现这几个环节包括的内容出来。
设置密码 = 添加手势密码
修改手势密码 = 匹配手势密码 + 删除手势密码 + 添加手势密码
清空手势密码 = 删除手势密码
所以,无非就是涉及到这三种形式
Type1 添加
Type2 删除
Type3 匹配
常见流程:
客户端与服务器怎么去做交互?
设置手势密码。用户先绘制第一遍手势密码,然后再绘制第二遍手势密码确认,这时客户端会判断第二次输入的是否正确,如果错误,清空数值,要求用户重新操作。如果正确,客户端通知服务器此时进行的是type1添加密码,同时将用户设置的各个点的数据传给服务器保存下来。这样设置操作就算完成了
修改手势密码。用户首先绘制原手势密码,客户端通知服务器此时进行的是type3匹配,同时将数据传给服务器比对,输入正确的话,服务器返回成功消息,于是用户有权限开始进行下一步操作了,下一步操作即为添加密码。
当用户点击清空手势密码。客户端返回类型type3给服务器,告诉服务器我现在是在进行清空密码操作,于是服务器收到请求后,直接将手势密码清空就完成了。
嗯,手势密码功能总算是做出来了,我是不是还应该判断一下我打开app时弹出来的界面是手势密码登录界面还是账号密码登录界面。
怎么做,我打开app时将账号传给服务器,让服务器判断一下此账号是否存在手势密码,如果存在,那就显示手势密码界面,如果不存在,那就显示账号密码界面。如果手机端不存在账号信息,那就直接账号密码登录。
总算搞定了,那还有没有考虑没到位的地方?
对了,我应该加一个次数限制吧。比如说,输入6次,就不准再输入了,只能使用账户密码登录。
为什么要加入次数限制这一条件?
这样想,如果允许用户无限次输入,那对于居心不良的人来说,是不是就可以随意破解了。也许你会说,设置的种类这么多,破解那得多难啊。然而,对于程序来说,这种密码的破解却很简单,所以出于安全性考虑,为了杜绝一切可能破解的因素,我们还是有必要加入次数限制。
因此,我们怎么去做。让服务器去判断次数,或者直接在本地判断次数,都是可以的,输入错误6次,即清空密码。在这里,我要说明的是,我为什么做直接清空而不是限制用户在多长时间内不准输入,每个人的思考点都会不同,也没有谁一定对谁一定错,存在即合理。
总结
手势密码是目前比较常见的防止第三人查看敏感数据和APP后台留驻唤起时保护用户的隐私一种方式。广泛用于银行类,支付类,聊天类APP中。考虑到手势密码的保存机制,关于银行APP登录状态后台留驻,建议启用延时保护,过时会话失效。
网友评论