Python工具箱系列(十一)

上文讲的古典加密算法虽然很简单,但是在密码史上是使用最久的加密方式。历史上由于算力有限,加上有学识的人有限,所以直到概率论出现后,古典密码才开始破防。归根结底,英文单词中字母出现的频率是不同的,e以12.702%的百分比占比最高,z只占到0.074%,感兴趣的同学可以去百科查字母频率详细统计数据。如果密文数量足够大,仅仅采用频度分析法就可以破解。如果再加上现代计算机强大的算力,凯撒加密算法更是不堪一击。

后续人类不断改进,在二战时期涌现了新的思路与算法。恩尼格玛机就是二战时期纳粹德国使用的加密机器,非常经典,并且难以破译。英国集全国之力进行破译,参与破译的人员有被称为计算机科学之父、人工智能之父的图灵。恩尼格玛机使用的加密方式本质上还是移位和替代,只不过因为密码表种类极多,破解难度高,同时加密解密机器化,使用便捷。恩尼格玛机共有26个字母键和26个带有字母的小灯泡,当按下键盘上的键时,加密后的密文字母所对应的小灯泡就会亮起来,依次记录密文发送给接收者就实现了密文传输。接收者也用相同的恩尼格玛机,依次输入密文并获取原文。密码机内装有“转子”装置,每按下键盘上的一个字母,“转子”就会自动地转动一个位置,相当于更换了一套密码表。最开始“转子”只有6格,相当于有6套密码表,后来升级到了26格,即有26套密码表。后来恩尼格玛机由一个“转子”升级到了多个“转子”,是密码表套数成指数级增长。最高水准恩尼格玛机具有8个“转子”,密码表套数为26的8次方,达到了2000多亿种。此时靠人工进行破译就不太可能了,国内某抗日神剧中一个数学美女天才,靠几张纸就破译了真的只能是呵呵了。电影《模仿游戏》较为真实得复现了破解方法,就是采用了类似现代计算机的机械机器进行快速运算。

 

现代经典密码学针对加解密问题,发展出几个大的方向:

  • 对称加密
  • 非对称加密
  • 散列

本文将简单介绍对称加密的python实现。先谈主要的对称加密算法,主要有以下几类:

  • DES(数据加密标准,Data Encryption Standard)。DES 应该是最早的现代密码学算法之一。它由美国政府提出,密钥长度为56位。目前,它暴力破解56位密码的时间,已经能控制在24小时内了。DES实际上是一个过时的密码学算法,目前已经不推荐使用了。关于DES,还有一点特别有意思。DES 包含一个关键模块:S盒,其设计的原理一直没有公开。因此,很多人都相信,这个S盒中存在后门,只要美国政府需要,就能够解密任何DES密文。
  • IDEA(国际数据加密算法,International Data Encryption Algorithm)。IDEA 由瑞士研究人员设计,密钥长度为128位。对比于其他的密码学算法,IDEA的优势在于没有专利的限制。相比于DES和AES的使用受到美国政府的控制,IDEA的设计人员并没有对其设置太多的限制,这让 IDEA在全世界范围内得到了广泛的使用和研究。
  • AES(高级加密标准,Advanced Encryption Standard)。在DES被破解后,美国政府推出了AES算法,提供了128位、192位和256位三种密钥长度。通常情况下,我们会使用128位的密钥,来获得足够的加密强度,同时保证性能不受影响。目前,AES是国际上最认可的密码学算法。在算力没有突破性进展的前提下,AES在可预期的未来都是安全的。
  • 国密标准或者自研加密算法。

对称密钥能够广泛用于:

  • 数据文件与数据库内容的加密。
  • 网络传输的信息加密。
  • 硬件/内核/驱动级加密,例如基于文件系统的加密等。

 

# pip install cryptography

from cryptography.fernet import Fernet

# 生成对称密钥
key = Fernet.generate_key()
print(key)

# 用密钥加密
coder = Fernet(key)
crymsg = coder.encrypt(b'what are you doing?')
print(crymsg)

# 用密钥解密
plaintext = coder.decrypt(crymsg)
print(plaintext)

代码运行后,能够看到加密后的密文比原文要长。实际运行时,密钥一定要保存好,丢失了密文就基本解不出来了。当然暴力破解还是可以的,只不过代价巨大。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python工具箱系列(十一) - Python技术站

(0)
上一篇 2023年4月2日 下午4:30
下一篇 2023年4月2日

相关文章

  • Python工具箱系列(三十一)

    Neo4j是一个高性能的开源的,使用Java语言实现的NoSQL图数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。现实中很多数据都是用图来表达的,比如社交…

    python 2023年5月11日
    00
  • Python工具箱系列(十五)

    前文讲述加解密时,直接将密钥写在了python源代码中,这肯定不是什么好的手法。应该将这类与代码加功效无关的信息保存到配置中,随时可以需要进行修改。从大的角度来看,配置无非就是以下方式: 保存到配置文件中,格式可以是txt/csv/ini/xml/yaml/json/其它特殊格式等; 保存到数据库中,数据库可以是本地的,也可以是远程的; 特殊情况下,配置信息…

    Python开发 2023年4月2日
    00
  • Python工具箱系列(十六)

    前面介绍了对称加密算法,本文将介绍密码学中另一类重要应用:消息摘要(Digest),什么是消息摘要?简单的定义是:对一份数据,进行一个单向的Hash函数,生成一个固定长度的Hash值,这个值就是这份数据的摘要,也称为指纹。 常见的摘要算法有: MD5 SHA1 SHA256 其它 特点如下:   无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如…

    Python开发 2023年4月2日
    00
  • Python工具箱系列(二十二)

    互联网世界里最流行的开源关系型数据库之一就是MySQL/MariaDB了,由于高度的相似,故而直接使用mysql统一指称。 windows下的安装 windows最吸引人的地方就在于易于安装。mysql在WINDOWS下也是最容易安装的。直接在官网上下载可安装程序,一路NEXT即可。 ubuntu18.04的安装 如果是生产环境部署,建议以普通用户角色,使用…

    Python开发 2023年3月31日
    00
  • Python工具箱系列(十四)

    上文介绍了命令行方式来对文件进行加解密操作。本文将继续在此基础上,实现一个快速简易的GUI界面方便操作,先上代码看效果。 import argparse import configparser import json import os import struct import sys from configparser import ConfigParse…

    2023年4月2日
    00
  • Python工具箱系列(二十五)

    Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。Redis是一个nosql数据库。nosql是not-only sql的意思,泛指非关系型数据库。…

    Python开发 2023年3月31日
    00
  • Python工具箱系列(八)

    前面我们提到过,有以下工具都可以开发Python代码: 直接使用Python解释器。运行Python就可以得到一个交互式命令行界面,可以简单的测试代码。作为Python入门,写代码不超过10行,完全可用。如果想开发大型代码,这个真心很难用。 使用IPython,也是命令行界面,但内置非常方便的各种宏与功能。比单纯的Python交互界面强太多。在某些情况下,例…

    2023年4月2日
    00
  • Python工具箱系列(二十六)

    ClickHouse(Click Stream,Data WareHouse)是俄罗斯的 Yandex于2016年开源的用于在线分析处理查询(OLAP:Online Analytical Processing)MPP架构的列式存储数据库(DBMS:Database Management System),能够使用 SQL 查询实时生成分析数据报告。特别值得称道…

    Python开发 2023年3月31日
    00
合作推广
合作推广
分享本页
返回顶部