1. 场景描述
“等待着下课,等待着放学,等待游戏的童年"。当罗大佑这首耳熟能详的“童年”再度想起的时候,你和我是否都会被这个熟悉的旋律带回到那个只属我们的懵懂年代?你还记得那个“同桌的你”吗?那个周杰伦唱到的“等你下课”的人,如今身在何方?在那样一个没有手机微信和短信传递讯息的年代,你是否经历或见证过这样的场景,通过一张张“小纸条”,给那个心仪的“她/他”传递浪漫?那些曾经在课堂上冒险传递诸如:“放学后,小树林见!”的约会纸条,既承载着浪漫,又蕴含着风险。如果约会纸条被老师截获或者被同学偷窥揭发,浪漫的初恋基本就凉凉了。在这种浪漫与风险并存场景中,如何保证纸条内容在传递中不被泄密,继续美好的浪漫呢?
下面让我们走进Python场景编程,一起见证和感悟浪漫的初恋与严谨的计算机科学相遇的时候,将会碰撞出怎样的火花。
2. 编程思路
我们的基本思路是这样的:首先对约会纸条的原始内容(明文)进行加密;其次将加密后生成的内容(密文)书写在纸条上传递出去;最后对纸条上的密文内容进行解密,还原纸条的原始内容。通过这样的方式,可以很好地解决约会纸条在传递过程中可能存在的泄密问题。
在Python中,我们可以使用函数ord(ch)获取字符ch在Unicode字符集中的数字值;函数chr(n)可以将数字值还原为Unicode中的字符。你完全可以把ord() / chr()看成是一对互逆的函数。
现在我们启动Python的交互式解释器,执行以下命令,并观察结果:
3. 代码实现
整个程序有两个模块组成。其中:
code_convert.py 完成加密/解密函数的基础模块,具有代码重要价值;
dating_paper.py 这是主程序模块,调用基础模块中的函数,实现字符串内容的加密/解密功能。下面是具体的程序代码和代码注解。
下面是主要函数的代码实现进行简要说明:
函数encode(message, offset)实现对原始字符串message加密,通过对message中的每一个字符进行循环处理:使用语句①获取字符在Unicode字符集中的数字值,再加上一个偏移量offset,然后转换成数字字符串后追加变量content中,以此实现字符串的累加式拼接。该函数的返回值就是经过加密处理后的密文内容;offset是一个整数类型的参数,代表一个偏移量,使用它可以简单地提升加密算法的安全强度,以此增加一些加密破译的难度。
函数decode(content, offset=0)实现对密文的解密/还原处理。参数content是存放密文的字符串,offset是一个整数偏移量;在函数的实现中,首先使用语句②把content存放的密文字符串转换为列表,这个列表中的每一个元素就是字符串形式的整数,其次通过语句③的列表推导式功能,将content中的每个元素转换为Unicode字符集中的字符,逐一将密文字符还原为明文字符。我们使用语句④,将列表content中的每一个元素进行字符串连接后返回这个值。这个函数的返回值就是解密后的原始字符串内容。
通过函数encode(message)和decode(content)配合使用,实现“明文”与“密文”相互转换,需要强调的是两个函数中必须使用相同的偏移量offset,方能正确地加密和还原。例如:使用encode(message, 100) / decode(content, 100) 的函数对,以此完成加密/解密功能,达到防止约会纸条内容泄密的终极目标。
4. 运行效果
D:\cases\懵懂的青春>python dating-paper.py
约会纸条原始内容:放学后小树林见,不见不散!
加密后的纸条内容:25918 23398 21518 23567 26641 26519 35265 65292 19981 35265 19981 25955 33
解密后的纸条内容:放学后小树林见,不见不散!
D:\cases\懵懂的青春>
经代码测试,程序实现了纸条内容的加密和还原功能。需要进一步说明的是,尽管encode()/decode()函数采用的加密/解密算法非常简单,容易被破解,但是把它们应用于约会纸条场景中,实现纸条内容的加密/解密功能,其安全强度是足够了。
5. 场景扩展
现代社会是网络化和信息化的时代,我们每个人都会有许多密码。例如:手机银行登录密码、邮箱登录密码、银行卡转账密码、支付宝密码、微信支付密码等等, 这些种类繁多的密码已经成为保护隐私和财产安全不受侵害的安全手段。如果密码被一些居心叵测的人截获,盗取银行卡或是社交工具中的隐私和钱财,将会给你的正常生活带来严重的困扰。如何保护密码不被泄密,最安全的方法还是将密码强行记忆在自己的脑海里,辅之于把密码写在纸质的“密码记事本”中,以防遗忘密码时备查。生活的经验告诉我们,往往最传统的方式就是最安全的方法,只要你保证了“密码记事本”安全,你就守住了隐私和财产安全的最后防线。但是一旦“密码记事本”被偷窥或遗失,你同样可能要面临风险和承担损失。我们如何解决因“密码记事本”被偷窥或遗失所带来的风险问题?答案就是使用加密/解密技术,将账号和密码原始内容转换为密文,然后手工抄录到“密码记事本”中;当你需要查询时,再将这段密文还原成明文。通过这种方法,我们就为“密码记事本”添加了安全锁。