书城科普探索机器人的世界(海洋与科技探索之旅)
2549600000015

第15章 神奇的密码锁

密码学是一门科学,有着悠久的历史。密码在古代就被用于传递秘密消息,在近代和现代战争中,传递情报和指挥战争均离不开密码,外交斗争中也离不开密码。密码一般用于信息通信传输过程中的保密和信息存储中的保密。随着计算机技术和信息技术的发展,密码技术的发展也非常迅速,应用领域也不断扩展,不再局限于为军事、外交斗争服务,也广泛应用于社会和经济活动中。当今世界已经出现了密码应用的社会化和个人化趋势。

密码和密码锁在《辞海》中对密码是这样释义的:“按特定法则编成,用以对通信双方的信息进行明密变换的符号。”例如:计算机密码、银行存储密码、电报密码。这些都需要经过编码、解码的过程。

锁是人们为了保护自己的财产而发明的一种用钥匙才能开启的装置。就现代而言,锁是一种以钥匙、密码、电路或者其他用具来开启的封缄装置,用以防止物品被打开、移走,兼具防护、管理,甚至是装饰的作用。《辞海》对锁的解释为:“必须用钥匙才能开启的封缄器。”《说文解字》解释为:“锁,铁锁,门键也。”密码锁是锁的一种,开启时用的是一系列的数字或符号。密码锁分为两部分,锁由机械结构完成,密码则由软件控制。密码锁的密码通常都只是排列而非真正的组合。部分密码锁只使用一个转盘来转动锁内的数个碟片或凸轮,有些密码则需要转动一组刻有数字的拨轮圈来带动锁内部的机械。

最简单的密码锁,常见于低安全设定的自行车锁,使用多个拨圈。每个圈的中间有凹位。锁的中心是一条轴,轴上有数个凸出的齿,用来卡住拨圈。当拨圈转到正确的密码组合时,锁便打开。这种密码锁是最容易打开的。

(一)简单密码锁内容:触动传感器输入指定次数,满足要求打开锁。

设备:单板机、触动传感器、马达、导线。

程序过程:程序运行后,按动触动传感器,达到指定次数后,马达转动,代表锁已经打开。

(二)复杂密码锁简单密码锁由于设计简单,其存在的缺陷很多,例如可以随便按动触动传感器试密码,密码很容易被破解。复杂密码锁对简单密码锁进行了改进,使其不易被破解。

内容:触动传感器输入指定次数,如果满足要求,锁才被打开;不满足要求则发出提示音,并转入重新输入状态。

设备:单板机、触动传感器、马达、导线。

程序过程:程序运行后,按动触动传感器,连续按动才有效,如果中断3s未按,则按3s前内部所记的触动传感器次数计算碰触次数,然后进行判断,若符合设定次数则打开锁;未达到指定次数则发出提示音,并在3声后要求重新进行输入。

试一试:试着画出复杂密码锁的程序流程图。

(三)三位密码锁复杂密码锁更趋于实用,但其还有功能上的不足,例如密码简单,只要破解者有耐心,仍可按穷举法进行破解。我们可以将把密码改进为多位密码,同时提供在3次输入错误后锁定键盘,经若干时间后才可重新开启键盘的功能。

内容:触动传感器输入三位密码,如果满足要求,则锁被打开;不满足要求则发出提示音,3次错误后,密码锁进入自动锁定状态,需3h后方能重新进行输入。

设备:单板机、触动传感器2个、马达、导线。

程序过程:程序运行后,触动传感器1作为数字输入,按几次代表输入几,输入好后由触动传感器2作为确认键进行确认,当3位密码输入完毕后,程序将与设定值进行比对,满足要求则打开锁,否则将发出提示音,并在3声提示后要求重新输入。若3次输入错误密码,则密码锁自动进入锁定状态,3h后才能重新进行输入。

所需程序知识跳转、容器(容器取值及运算)、光感判断分支与合并的知识,在前面已经学习过。

触感触动,松开次数分支图标。在复杂程序中,往往会使用到多个输入端口的分支判断,此时既要清楚不同端口的判断来源,还要按照一定的逻辑关系来进行依次判断。因为有些时候程序并无编译错误,但逻辑上却出现问题,并不符合题目或实际任务的要求。这就要求同学们对于程序要有较强的逻辑思维能力。程序的描述过程就是逻辑思维最好的体现,同学们可以仔细阅读任务要求,掌握程序的清晰思路。制作密码锁活动任务利用所学知识,自制一个密码锁。

活动提示双触动传感器实现三位密码输入使用容器赋值的方法,直接从程序内部读取触动传感器1的碰触次数,记录并作为输入数字。每次按下触动传感器2进行确认后,相应容器值减1(初始值为3),当值为0后输入密码步骤完毕。

三位密码的算法比对(1)可直接确定单一密码,例如原始值为234,比对时则直接进行容器间比较。

(2)简单算法,例如计算输入值是否为13的整数倍,如果可以除尽则正确,否则错误。

自动锁定状态的实现可在对比环节后加入判断机制,判断容器为3次限制,若成功开启则限制次数还原为3,若失败一次则减1,该容器值为0后,则进入自动锁定状态,延时开启。

活动步骤图72所示程序为数字输入部分(由触动传感器1完成),采用触动传感器计数分支判断功能实现“输入数字与按动次数相等”,图示程序最高允许输入为6,若按动次数超过6仍然计数为6。可以按照同样方法,将输入数字扩展为0~9,当按动10下时输入为0,超过10下则提示错误音,并进入重新输入状态(触动传感器按动次数清零)。

图73所示程序为确认输入(由触动传感器2完成),当操作者已经完成了对数字的输入后,需要按下触动传感器2进行确认,确认后,输入的数字将被程序记录下来,同时判断是第几次按下触动传感器2。图中示例密码为3位,则需要判断触动传感器2是否被按下了3次,若按下次数不足3次,则继续输入下一位数字;若按下次数已经为3,则结束输入及确认操作,转为密码判断。

图74所示程序为判断密码是否正确。输入的3位密码按顺序将第一位乘100,第二位乘10,第三位乘1(程序中不用乘),然后将三位数相加,同设定好的密码进行比较,若与标准密码相同则完成打开动作(可以是任意正确行为);不正确则发出提示音。同时判断输入次数是否为3,如果不为3则可以重新输入,若错误输入3次,则需要进行程序锁定部分。

图75所示的程序为密码限时保护,当连续3次错误输入后,程序将进入自动保护状态,在一定时间内将无法再次输入。当保护时间到达后,方可继续输入。程序使用计时器循环的方式,设定保护时间为15s,可根据需要自行修改。

实践课堂检测试说明单触动传感器如何实现数字输入。

确定按键的作用是什么容器在此程序中的作用是什么知识链接信息密码锁的相关信息可到维基百科中查询,网址为:http://zh.wikipedia.

答案提示阅读与思考思考:程序同时执行两个任务。一个任务是A马达转动8s后关闭,如果8s后连在端口1上的触感被按的次数大于5,就演奏蓝色乐曲;另一个任务是C马达转动10s后关闭,如果10s后连在端口3上的触感被按下和松开的次数大于16,就演奏黄色乐曲。

检测与评估检测:

程序采用触动传感器计数分支判断功能实现“输入数字与按动次数相等”。

确认键的作用:记录输入完的数据,同时判断是第几次按下触动传感器,如果超出程序允许的范围,程序会自动锁定,加强安全。

容器的作用是:保存输入的数字,便于在程序中随时使用。