首页 > 编程语言 >场景编程集锦-懵懂的青春

场景编程集锦-懵懂的青春

时间:2023-01-08 11:34:59浏览次数:34  
标签:编程 加密 纸条 offset content 密码 集锦 密文 懵懂

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 content

def 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, decode

def 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. 场景扩展

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

标签:编程,加密,纸条,offset,content,密码,集锦,密文,懵懂
From: https://blog.51cto.com/u_12757888/5996607

相关文章

  • 卷积神经网络编程基础|填充和步幅
    问题上一节课(​​https://www.zhihu.com/education/video-course/1647604835598092705?section_id=1647604843789894187​​)中介绍卷积层的互相关运算,并且使用了高宽为3的输......
  • 场景编程集锦-乒坛争锋:孙颖莎vs伊藤美城
    1.场景描述孙颖莎和伊藤美诚是世界女子乒坛的顶尖运动员。根据国际乒联2022年11月15日公布的世界排名,孙颖莎位列第一,伊藤美诚排名第五。孙颖莎是中国女子乒乓球队的三大......
  • 极客编程python入门-hmac/urllib
    hmacHmac算法针对所有哈希算法都通用,无论是MD5还是SHA-1。采用Hmac替代我们自己的salt算法,可以使程序算法更标准化,也更安全。Python自带的hmac模块实现了标准的Hmac算法。>>......
  • 七DOM编程学习-概念引入
    ​  什么是DOM编程简单来说:DOM编程就是使用document对象的API完成对网页HTML文档进行动态修改,以实现网页数据和样式动态变化效果的编程.什么是documentdocument对......
  • 七DOM编程学习-概念引入
    ​  什么是DOM编程简单来说:DOM编程就是使用document对象的API完成对网页HTML文档进行动态修改,以实现网页数据和样式动态变化效果的编程.什么是documentdocument对......
  • 适合编程初学者的开源项目:小游戏2048(Go语言版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。2048游戏规则一共16个单元格,初始时由2或者4构成。1、手指向一个方向滑动,所有格子会向那个方向运动。2......
  • 使用云桌面搭建少儿编程环境
    公司从事scratch少儿编程培训,学员需要使用到运行scratch的编程环境。每个培训点大概需要10个左右的电脑。如果使用PC搭建,投入较高,并且管理起来比较复杂。学员再使用后,可能......
  • 一些学习编程的优质网站
    国外的google.com就不说了,好是好,得跳墙。http://github.com地球上最大的开源中心,项目非常丰富,从华贵绚丽的界面到低调实用的小类库,应有尽有。需要睁大眼睛慢慢挑,适合......
  • 网络编程
    网络编程CS架构和BS架构网络通信物理连接介质osi七层模型物理层>数据链路层>网络层>传输层>会话层>表示层>应用层物理层:信号转换问题0101==》电信号(......
  • 场景编程集锦-月光族的期待
    1.场景描述“月光族”是指没到下一个发薪日,工资就被全部花光的一群人。这个称谓是一个没有贬义的中性词。“月光族”通常是有知识有文化、有固定的工作收入,秉持着乐观豁达......