1. 场景描述

“等待着下课,等待着放学,等待游戏的童年"。当罗大佑这首耳熟能详的“童年”再度想起的时候,你和我是否都会被这个熟悉的旋律带回到那个只属我们的懵懂年代?你还记得那个“同桌的你”吗?那个周杰伦唱到的“等你下课”的人,如今身在何方?在那样一个没有手机微信和短信传递讯息的年代,你是否经历或见证过这样的场景,通过一张张“小纸条”,给那个心仪的“她/他”传递浪漫?那些曾经在课堂上冒险传递诸如:“放学后,小树林见!”的约会纸条,既承载着浪漫,又蕴含着风险。如果约会纸条被老师截获或者被同学偷窥揭发,浪漫的初恋基本就凉凉了。在这种浪漫与风险并存场景中,如何保证纸条内容在传递中不被泄密,继续美好的浪漫呢?

下面让我们走进Python场景编程,一起见证和感悟浪漫的初恋与严谨的计算机科学相遇的时候,将会碰撞出怎样的火花。


2. 编程思路

我们的基本思路是这样的:首先对约会纸条的原始内容(明文)进行加密;其次将加密后生成的内容(密文)书写在纸条上传递出去;最后对纸条上的密文内容进行解密,还原纸条的原始内容。通过这样的方式,可以很好地解决约会纸条在传递过程中可能存在的泄密问题。
在Python中,我们可以使用函数ord(ch)获取字符ch在Unicode字符集中的数字值;函数chr(n)可以将数字值还原为Unicode中的字符。你完全可以把ord() / chr()看成是一对互逆的函数。
现在我们启动Python的交互式解释器,执行以下命令,并观察结果:

>>> ord('约')
32422
>>> chr(32422)
'约'
>>>
>>> ord('会')
20250
>>> chr(20250)
'会'
>>>

3. 代码实现

整个程序有两个模块组成。其中:
code_convert.py 完成加密/解密函数的基础模块,具有代码重要价值;
dating_paper.py 这是主程序模块,调用基础模块中的函数,实现字符串内容的加密/解密功能。下面是具体的程序代码和代码注解。

"""
code_covert.py : 实现对字符串的编码/解码功能
"""
def encode(message, offset=0):
"""
功能:将明文转换密文
参数:
message : 以明文形式的原始字符串
offset : 整数偏移量
返回:
content : 以密文形式的原始字符串
"""content = ''for ch in message:content += str(ord(ch)+offset)+' '   # ①return contentdef decode(content, offset=0):"""
功能:将密文转成明文
参数:
content : 密文形式存放的原始字符
offset : 整数偏移量
返回:解密后的原始字符串
"""content = content.split()    # ②content = [chr(int(n)-offset) for n in content]    # ③return "".join(content)    # ④# dating-paper.py : 懵懂的青春
from code_convert import encode, decodedef main():message = input('约会纸条原始内容:')
content = encode(message)print('加密后的纸条内容:' + content)print('解密后的纸条内容:' + decode(content))if __name__ == '__main__':main()

下面是主要函数的代码实现进行简要说明:
函数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. 场景扩展

现代社会是网络化和信息化的时代,我们每个人都会有许多密码。例如:手机银行登录密码、邮箱登录密码、银行卡转账密码、支付宝密码、微信支付密码等等, 这些种类繁多的密码已经成为保护隐私和财产安全不受侵害的安全手段。如果密码被一些居心叵测的人截获,盗取银行卡或是社交工具中的隐私和钱财,将会给你的正常生活带来严重的困扰。如何保护密码不被泄密,最安全的方法还是将密码强行记忆在自己的脑海里,辅之于把密码写在纸质的“密码记事本”中,以防遗忘密码时备查。生活的经验告诉我们,往往最传统的方式就是最安全的方法,只要你保证了“密码记事本”安全,你就守住了隐私和财产安全的最后防线。但是一旦“密码记事本”被偷窥或遗失,你同样可能要面临风险和承担损失。我们如何解决因“密码记事本”被偷窥或遗失所带来的风险问题?答案就是使用加密/解密技术,将账号和密码原始内容转换为密文,然后手工抄录到“密码记事本”中;当你需要查询时,再将这段密文还原成明文。通过这种方法,我们就为“密码记事本”添加了安全锁。

场景编程集锦 - 懵懂的青春相关推荐

  1. 场景编程集锦 - BMI指数与健身达人

    1. 场景描述 BMI指数(身体质量指数,英文Body Mass Index)是用体重公斤数除以身高米数的平方得出的数字,是目前国际上通用的衡量人体胖瘦程度以及是否健康的一个标准."身体质量 ...

  2. 场景编程集锦 - 吉米的总统梦想

    1. 场景描述   吉米是太平洋岛国一个贫苦家庭的孩子,他的梦想就是当总统,引领国家走向富强之路.   开学的第一堂课上,老师用白色的粉笔在黑板上写下了"我的梦想",同学们都陷入了 ...

  3. 场景编程集锦-月光族的期待

    1. 场景描述 "月光族"是指没到下一个发薪日,工资就被全部花光的一群人.这个称谓是一个没有贬义的中性词."月光族"通常是有知识有文化.有固定的工作收入,秉持着 ...

  4. 场景编程集锦 - 乒坛争锋:孙颖莎vs伊藤美城

    1. 场景描述 孙颖莎和伊藤美诚是世界女子乒坛的顶尖运动员.根据国际乒联2022年11月15日公布的世界排名,孙颖莎位列第一,伊藤美诚排名第五.孙颖莎是中国女子乒乓球队的三大主力,曾获得2020年东京 ...

  5. 场景编程应用集锦 - 电闪雷鸣的数学联想

    1. 场景描述 电闪雷鸣总能给人许多的联想. 我联想到了电闪雷鸣.暴雨倾盆.山洪爆发.洪水泛滥的灾难场景,这种现象在中国古代通常被解释为"冒犯神灵,雷神发怒"的因果关系. 我联想到 ...

  6. 5G+工业互联网应用场景大集锦!

    来源:雷锋网 "5G+"火了,5G+医疗.5G+高铁.5G+物流等应用场景不断涌现. " "5G+"火了,5G+医疗.5G+高铁.5G+物流等应用场景 ...

  7. Delphi和Word编程集锦

    用Delphi合并Word表格中单元格 //合并Word表格中单元格 proceduremergeWordCell; varWordApp:TWordApplication; WordDoc:TWor ...

  8. 十周年再发重磅新品,小米发布50倍潜望式变焦小米10青春版、MIUI 12

    2020年4月27日,小米集团旗下小米品牌举办新品发布会,小米10青春版.MIUI12两款重磅新品正式发布,一同亮相的还有小米手表Color X Keith Haring联名版和小米蓝牙耳机Line ...

  9. 智能座舱--场景引擎

    1.中科创达场景自编辑引擎 中科创达 张航:基于车云一体的场景引擎_哔哩哔哩_bilibili 王志杰:定义你自己的智能场景--智能场景引擎 - 2022 中国汽车论坛 2.小鹏智能座舱 小鹏汽车 任 ...

最新文章

  1. web3.js(一)根据地址查询以太数量
  2. WebConfig自定义节点并读取
  3. java 遍历写什么_Java文件遍历及文件读写
  4. synchronousqueue场景_java并发队列之SynchronousQueue
  5. xshell怎么连接windows server_未能连接一个Windows服务 怎么回事
  6. 初识BGP外部网关协议(二)
  7. 如何在Eclipse里显示BPMN格式的流程图
  8. 奇特的恐怖之门:谈周德东的恐怖小说《门》
  9. LVDS收发传输实例
  10. vue接收json数据_Vue之使用ajax获取json数据,并用v-for循环显示在表格中
  11. 10个趣味的物理与化学动图欣赏,看过直称神奇!
  12. php properties,PHP ReflectionClass getStaticProperties()用法及代码示例
  13. 20155319 2016-2017-2 《Java程序设计》第5周学习总结
  14. nginx学习-负载均衡-keepalived高可用-反向代理
  15. 两个非常不错的在线pdf转epub的网站,没有上传大小限制
  16. 浙江海盐已经试行“核供暖”,南方到底该不该供暖?南方人顶起~
  17. mysql语句格式化日期时间成特定格式
  18. H5游戏调试技巧归类总结
  19. Git同步和撤销命令
  20. 企事业单位移动OA系统选型解读

热门文章

  1. 从输入URL到页面成功展示到浏览器的过程?
  2. 旺旺游戏 ‘阳光牧场’ 经验
  3. 我29岁了,现在开始努力还来得及吗?
  4. css3魔方3乘3每层旋转_如何使用css3设计出一个立体旋转魔方?
  5. variant conversion error for variable v23
  6. 如何使textbox只能输入数字和小数点
  7. QQProtect.sys漏洞真有意思
  8. mint-ui vue双向绑定
  9. Tinyumbrella无法运行的解决办法
  10. 这才是大学生必备软件 | 知识管理