Python加密与解密小结-创新互联

阅读目录

成都创新互联公司2013年开创至今,先为获嘉等服务建站,获嘉等地企业,进行企业商务咨询服务。为获嘉企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

前言

加密算法分类
Python加密库
DES加密
AES加密
RSA加密

前言

据记载,公元前400年,古希腊人发明了置换密码。1881年世界上的第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用。
随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在1997年,美国国家标准局公布实施了“美国数据加密标准(DES)”,民间力量开始全面介入密码学的研究和应用中,采用的加密算法有DES、RSA、SHA等。
随着对加密强度需求的不断提高,近期又出现了AES、ECC等。

使用密码学可以达到以下目的:
保密性:防止用户的标识或数据被读取。
数据完整性:防止数据被更改。
身份验证:确保数据发自特定的一方。

加密算法分类

对称加密算法:
对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥。
相对于非对称加密,对称加密具有更高的加解密速度,但双方都需要事先知道密钥,密钥在传输过程中可能会被窃取,因此安全性没有非对称加密高。

常见的对称加密算法:DES,AES,3DES等等

非对称加密算法:

文件加密需要公开密钥(publickey)和私有密钥(privatekey)。
接收方在发送消息前需要事先生成公钥和私钥,然后将公钥发送给发送方。发送放收到公钥后,将待发送数据用公钥加密,发送给接收方。接收到收到数据后,用私钥解密。
在这个过程中,公钥负责加密,私钥负责解密,数据在传输过程中即使被截获,攻击者由于没有私钥,因此也无法破解。
非对称加密算法的加解密速度低于对称加密算法,但是安全性更高。

非对称加密算法:RSA、DSA、ECC等算法

消息摘要算法:

消息摘要算法可以验证信息是否被篡改。
在数据发送前,首先使用消息摘要算法生成该数据的签名,然后签名和数据一同发送给接收者。
接收者收到数据后,对收到的数据采用消息摘要算法获得签名,最后比较签名是否一致,以此来判断数据在传输过程中是否发生修改。

 Python加密库

PyCrypto是 Python 中密码学方面最有名的第三方软件包。可惜的是,它的开发工作于2012年就已停止。

其他人还在继续发布最新版本的 PyCrypto,如果你不介意使用第三方的二进制包,仍可以取得Python 3.5 的相应版本。

比如,可以在 Github 上找到了对应Python3.5的PyCrypto 二进制包。

幸运的是,有一个该项目的分支PyCrytodome 取代了 PyCrypto 。为了在 Linux 上安装它,

你可以使用以下pip 命令:

pip3 install -i https://pypi.douban.com/simple pycryptodome

在Windows 系统上安装则稍有不同:

pip3 install -i https://pypi.douban.com/simple pycryptodomex

DES加密

全称为Data EncryptionStandard,即数据加密标准,是一种使用密钥加密的块算法

入口参数有三个:Key、Data、Mode

Key为7个字节共56位,是DES算法的工作密钥;

Data为8个字节64位,是要被加密或被解密的数据;

Mode为DES的工作方式,有两种:加密或解密

3DES(即Triple DES)是DES向AES过渡的加密算法,

使用两个密钥,执行三次DES算法,

加密的过程是加密-解密-加密

解密的过程是解密-加密-解密

from Crypto.Cipher import DES
key = b'abcdefgh' # 密钥 8位或16位,必须为bytes

def pad(text):
  """
  # 加密函数,如果text不是8的倍数【加密文本text必须为8的倍数!】,那就补足为8的倍数
  :param text: 
  :return: 
  """
  while len(text) % 8 != 0:
    text += ' '
  return text


des = DES.new(key, DES.MODE_ECB) # 创建一个DES实例
text = 'Python rocks!'
padded_text = pad(text)
encrypted_text = des.encrypt(padded_text.encode('utf-8')) # 加密
print(encrypted_text)
# rstrip(' ')返回从字符串末尾删除所有字符串的字符串(默认空白字符)的副本
plain_text = des.decrypt(encrypted_text).decode().rstrip(' ') # 解密
print(plain_text)
#

当前标题:Python加密与解密小结-创新互联
转载来源:http://myzitong.com/article/cdgdci.html