如果想要编写对日期和时间进行操作的代码,可以查阅 datetime 模块的相关资料 。
10.9.2 在程序中使用time.time()方法第34行,time.time()方法返回了当前时间并将其存储到名为 startTime 的变量中;第35~38行根据变量 myMode 的值是encrypt还是decrpt来调用encryptMessage()或decryptMessage() 。
33.# 测量加/解密所需时间34.startTime = time.time()35.if myMode == 'encrypt':36.translated = transpositionEncrypt.encryptMessage(myKey, content)37.elif myMode == 'decrypt':38.translated = transpositionDecrypt.decryptMessage(myKey, content)39.totalTime = round(time.time() - startTime, 2)40.print('%sion time: %s seconds' % (myMode.title(), totalTime))加/解密完成后,第39行再次调用了time.time()方法,并用这次调用的时间减去startTime,得到的结果是两次调用time.time()方法的间隔时间 。time.time() - startTime表达式将所得结果传给round()方法,也就是将其取整,因为程序并不需要精确到毫秒 。这个整数值赋值给了变量 totalTime 。第40行使用了字符串连接,并为用户打印了程序所处的模式及用于加密或解密的时长 。
10.10 将输出写入文件加密后(或解密后)的文件内容现在存储在变量translated中,但这个变量在程序终止时就会被释放,因此需要一个文件来存储这个字符串,这样哪怕程序停止执行,结果仍能保存 。第43~45行的代码进行了这部分操作,打开了一个新文件[将w传给open()方法]并调用文件对象的write()方法 。
42.# 将置换后的消息写入输出文件43.outputFileObj = open(outputFilename, 'w')44.outputFileObj.write(translated)45.outputFileObj.close()接下来在第47行和第48行打印了更多信息,告知用户输出文件的名称及加/解密过程已经结束 。
47.print('Done %sing %s (%s characters).' % (myMode, inputFilename,len(content)))48.print('%sed file is %s.' % (myMode.title(), outputFilename))第48行是main()函数的最后一行 。
10.11 调用main()函数第53行和第54行(在第6行def语句执行之后被执行的两行)调用了main()函数,前提是当前程序处于运行状态而非被引用的状态下 。
51. # 如果运行 transpositionCipherFile.py (而不是作为模块引入),则52. # 调用main() 函数53. if __name__ == '__main__':54.main()7.12节对这部分进行了详细解释 。
10.12 小结除了open()、read()、write()和close()这些帮助我们在硬盘上加密大文本文件的函数,transpositionFileCipher.py 程序中没有包含太多的新内容 。读者学到了如何使用 os.path.exists()函数检查文件是否已经存在 。同时如读者所见,编程时可以通过在新程序中引入之前所写程序的函数来拓展程序的能力,这大大增长了计算机加密信息的能力 。
除此之外,读者也学习到了一些有用的字符串方法,它们使得程序在接收yoghurt输入时更加灵活;time模块也可以帮助计算程序运行的时间 。
和实现凯撒密码的程序不同的是,如果想要使用暴力算法破解通过置换密码加密的文件,会出现太多可能的密钥 。但如果编写一个能够识别英语(和其他无意义的乱码)的程序,计算机就可以检查成千上万种解密结果,并确定一把可以成功将密文解密为英语的密钥 。这在第11章中会详细介绍 。
本文摘自《Python密码学编程 第2版》,[美] 阿尔·斯维加特(Al Sweigart) 著,郑新芳,赵怡翾译 。

文章插图
- 易懂的密码学,畅销书全面升级
- Python编程实现加密算法的初学者指南
推荐阅读
- GUI 什么是Python 的图形界面编程?你了解了吗
- Python之PyCharm永久性激活教程
- 编程小白们,别再去啃谭浩强的C语言了,有人这样学一个月入门
- Python3.8的新增特性
- 带你认识Python中黑客喜欢攻击的10个安全漏洞以及应对方法
- 十一 网络编程懒人入门:一文读懂什么是IPv6
- 教你用Python实现截图和文字识别,就是这么简单
- Python中多线程和多处理的初学者指南
- method 学编程傻傻分不清什么是方法和函数(function)?
- 谁偷偷删了你的微信?用Python分分钟揪出来
