加密算法简述[python]
——引子:本文主要针对python使用密码学算法原理的简单表述,主要说明了几种加密算法的主要原理和特点;python相关库的安装、说明和使用。可以解决如下问题:1.
from Crypto.Cipher import DES
要安装pycrypto库。2.pycrypto安装不上怎么办。3.pycryptodome和pycryptodomex有什么区别
前言:
-
版本:python3.7, pycryptodome3.9
-
安装: pip install pycryptodome
-
涉及模块说明: pycrypto、pycryptodome、pycryptodomex
pycrypto: 原始密码学模块,无人维护(已废弃)
pycryptodome: 强制替代pycrypto模块,用法相同,其安装在Crypto包下All modules are installed under the Crypto package.
Check the pycryptodomex project for the equivalent library that works under the Cryptodome package.pycryptodomex: 同pycryptodome功能,但与pycrypto模块可以共存,都安装在Cryptodome包下
All modules are installed under the Cryptodome package.
Check the pycryptodome project for the equivalent library that works under the Crypto package.
In this case, all modules are installed under the Cryptodome package. PyCrypto and PyCryptodome can coexist.
加密算法的分类:
-
对称加密算法 具有更高的加密速度,但双方都需要事先知道秘钥,秘钥在传输过程中可能会被窃取,因此安全性没有非对称加密高。 如:‘DES’, ‘AES’, ‘3DES’
-
非对称加密算法 加密速度低于对称加密算法,但安全性更高。 如:RSA, DSA, ECC
-
利用字典的格式转换加密。 MAKETRANS()
DES加密:
- 即数据加密标准,是一种使用秘钥加密的块算法,入口参数有三个:key, Data, Mode
key为7个字节共56位,是DES算法的工作秘钥;
Data为DES的工作方式,有两种:加密和解密 - ‘3DES’:
是DES向AES过渡的加密算法,使用两个秘钥,执行三次DES算法,
加密的过程是加密-解密-加密
解密的过程是解密-加密-解密
#DES加密示例:
from Crypto.Cipher import DES
key = b'abcdefgh' # 密钥 8位或16位,必须为bytes
def pad(text):
"""加密函数,如果text不是8的倍数【加密文本text必须为8的倍数!】,那就补足为8的倍数
"""
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)