数据加密方式 | 描述 | 主要解决问题 | 常用算法 |
单向加密 | 指只能加密数据,而不能解密数据 | 数据的完整性 | MD5,SHA系列算法 |
对称加密 | 指数据加密和解密使用相同的密钥 | 数据的机密性 | DES,AES |
非对称加密 | 也叫公钥加密,指数据加解密使用不同的密钥---密钥对 | 身份验证 | DSA,RSA |
进制转换法:
print(bin(266)) #十进制转二进制
print(int('0b100001010',2)) #二进制转十进制
print(hex(266)) #十进制转十六进制
print(int('0x10a', 16)) #十六进制转十进制
MD5(message-digest algorithm):
MD5加密 32位是e10开头 16位是49b开头
from hashlib import md5
md5_obj=md5()
md5_obj.update('加密数据'.encode())
print(md5_obj.hexdigest()) #648bfc23726d2e76af569f6fea26c1f8
md5_obj.update('加密数据'.encode())
print(md5_obj.hexdigest()) #47c58fbd984d00c4c0c24396be4ed52f
md5_obj=md5() #每次重新加密需要最好实例化一下 保证数据准确性
md5_obj.update('加密数据加密数据'.encode())
print(md5_obj.hexdigest()) #47c58fbd984d00c4c0c24396be4ed52f
?SHA(Secure Hash Algorithm):
sha512_obj=sha512()
sha512_obj.update('加密数据'.encode())
print(sha512_obj.hexdigest())
#26f5f6136978fb24bc9821293c0dad9b5a6f35377b88e672d4ddacff1086a30819164061dffce41fde63bb3fc3d3d7f54ca82119d268428eedeaa29f10565c24
DES(Data Encryption Standard):
from Cryptodome.Cipher import DES
key=b'1234abcd' # 需要是二进制的 并且8位数
#加密
des=DES.new(key,DES.MODE_ECB) #不仅需要key值 还需要知道用哪种模式
content='加密内容' #一个中文在utf-8是3个字节,在gbk是2个字节 这里的contente为12个字节
print(len(content.encode()))
en_data=content+(8-len(content.encode())%8)*'-' #字节不够需要补字节 先取除以8的余数 再用8减去该余数 再补充到文本里 补码'-'可以自己来控制
enc_data=des.encrypt(en_data.encode())
print(des.decrypt(enc_data))
#解密
t_data=des.decrypt(enc_data)
print(t_data.decode())
AES(Advanced Encryption Standard):
key=b'12345878abcdefgh' #需要是二进制的 长度为16位数
iv=b'1234567890abcdef' #初始化向量 增加密码的安全性 必须是16位长度 二进制
aes=AES.new(key,AES.MODE_CBC,iv)#1.key密码 2.mode加密模式 3.初始化向量
#加密
content='爱你一万年'
b_content=content.encode() #转成二进制
b2_data=content+(16-len(b_content)%16)*'-'
b2c_data=aes.encrypt(b2_data.encode())
print(b2c_data)
#解密
aes1=AES.new(key,AES.MODE_CBC,iv)
de_data=aes1.decrypt(b2c_data)
print(de_data.decode())
公钥(7(E),33(N)) | 私钥(3(D),33(N)) | ||
源数据 | h,k | 2,11 | 密文 |
十进制 | 8,11 | 2的3次方=8,11的3次方=1331 | 求幂 |
求幂 | 8的7次方=2097152,11的7次方=19487171 | 8%33=8,1331%33=11 | 求余 |
求余 | 2097152%33=2,19487171%33=11 | 8,11 | 十进制 |
密文 | 2,11 | h,k |
明文**E%N=密文?
密文**D%N=明文
E=7 D=3 N=33
import rsa
public_key,private_key=rsa.newkeys(999)
content='圣诞快乐!'
en_data=rsa.encrypt(content.encode(),public_key)
print(en_data)
de_data=rsa.decrypt(en_data,private_key)
print(de_data.decode())
#也可以通过自定义来传值
jf1=rsa.PublicKey(3,5) #公模 指数
print(jf1)