潇洒郎: 加密算法学习:DES、AES、RSA
Python知识点Python 中,数字0-9、英文字母a-zA-Z、小数点.、下划线_以及空格 ,各占一个字节,而一个汉字可能占 2~4 个字节,具体占多少个,取决于采用的编码方式。
1字节=8bit/位(2进制,1位只有0和1两种表示)
汉字在 GBK/GB2312 编码中占用 2 个字节,而在 UTF-8 编码中一般占用 3 个字节。
Python3 默认使用utf-8 编码
len(str) 返回的是字节数, 即单位为 字节/byte
str1 = "人生苦短,我用Python" # 6个汉字,1个中文逗号,6个英文,共占7*3+6=27 print(len(str1.encode())) #27
str1 = "人生苦短,我用Python" # 7*2+6=20
print(len(str1.encode('gbk'))) # 20
DES
DES 简介
DES算法的入口参数:Key、Data、Mode : Key为8个字节共64位,是DES算法的工作秘钥; Data也为8个字节64位,是要被加密或解密的数据;Mode为DES的工作方式,有两种:加密或解密。 DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中将加密的文本块分成两半。 使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用 16 个循环,使用异或,置换,代换,移位操作四种基本运算。 DES算法特点:分组比较短、秘钥太短、密码生命周期短、运算速度较慢。 Python3实现
环境依赖安装:pip install pycryptodome
import base64
from urllib import request
from Crypto.Cipher import AES,DES
#DES加密
def des_encrypt(text): # 传入未编码的文本字符串
text = request.quote(text)
aes = DES.new(add_to_8(KEY),DES.MODE_ECB)
encrypt_aec = aes.encrypt(add_to_8(text))
encrypt_text = str(base64.encodebytes(encrypt_aec),encoding="utf-8").strip()
return encrypt_text
#DES解密
def des_decrypt(text): # 传入加密后的文本字符串
aes = DES.new(add_to_8(KEY),DES.MODE_ECB)
decrypt_aec = base64.decodebytes(text.encode(encoding='utf-8'))
decrypt_text = str(aes.decrypt(decrypt_aec),encoding='utf-8').replace(" ",'')
decrypt_text = request.unquote(decrypt_text)
return decrypt_text
#补足8位/byte 并返回bytes 如果是3DES,要import DES3,然后 add_to_16即可
def add_to_8(value):
while len(value) % 8 != 0:
value = value + " "
return value.encode(encoding='utf-8')
text2 = "我爱你,不是因为你的魅力"
print("原文本信息:n",text2)
KEY = "nihaoyaa" # 长度为8,单位为字节
tt=des_encrypt(text2)
print('DES加密:n',tt)
tt2= des_decrypt(tt)
print('DES解密:n',tt2)



