http://www.javashuo.com/article/p-dtnlzbpa-cn.html
html
from Cryptodome.Cipher import DES import binascii # DES加密数据的长度须为8的的倍数,不够能够用其它字符填充 text = 'Welcome to DES' if len(text) % 8 != 0: text = text + "+" * (8 - len(text) % 8) # 密钥:必须为8字节 key = b'12345678' # 使用 key 初始化 DES 对象,使用 DES.MODE_ECB 模式 des = DES.new(key, DES.MODE_ECB) # 加密 result = des.encrypt(text.encode()) print('加密后的数据:', result) # 转为十六进制 binascii 的 b2a_hex 或者 hexlify 方法 print('转为十六进制:', binascii.b2a_hex(result)) # 解密 print('解密后的数据:', des.decrypt(result))
from Cryptodome.Cipher import AES from Cryptodome import Random import binascii text = 'Welcome to AES' # 密钥key 长度必须为16(AES-128)、24(AES-192)或 32(AES-256)的Bytes长度 key = b'1234567890ABCDEF' # 生成长度等于AES块大小的不可重复的密钥向量 iv = Random.new().read(AES.block_size) # 使用 key 和 iv 初始化AES对象,使用 AES.MODE_CFB 模式 aes = AES.new(key, AES.MODE_CFB, iv) # 加密 result = aes.encrypt(text.encode()) # 解密 # 不能在encrypt()以后调用decrypt() # 须要用相同的key和iv初始化新的AES对象 decrypt_aes = AES.new(key, AES.MODE_CFB, iv) print('密钥:', key) print('iv:', iv) print('十六进制的iv:', binascii.b2a_hex(iv)) print('加密后的数据:', result) print('转为十六进制:', binascii.b2a_hex(result)) print('解密后的数据:', decrypt_aes.decrypt(result))
import rsa text = 'Welcome to RSA' # 生成密钥对 pubkey, prikey = rsa.newkeys(1024) # 加密:使用公钥 result = rsa.encrypt(text.encode(), pubkey) print('加密后的数据:',result) # 解密:使用私钥 print('解密后的数据:',rsa.decrypt(result, prikey))
import rsa text = 'Welcome to RSA' # 公钥有两个值 n,e public_n = "e0b509f62a8fc9" * 4 public_e = '010001' # n、e必须为整数 # 将16进制的字符串转为整数 rsa_n = int(public_n, 16) rsa_e = int(public_e, 16) print('n:{}\ne:{}'.format(rsa_n, rsa_e)) # 建立公钥 rsa.PublicKey(n,e) pubkey = rsa.PublicKey(rsa_n, rsa_e) print('公钥类型:', type(pubkey)) print('公钥:', pubkey) print('n:{}\ne:{}'.format(pubkey.n, pubkey.e)) print('加密后的数据:', rsa.encrypt(text.encode(), pubkey))
import rsa pubkey, prikey = rsa.newkeys(1024) # 加签 rsa.sign(原信息,私钥,加密方式) 生成加签事后的信息 signMessage = rsa.sign('投资房地产'.encode(), prikey, 'MD5') print(signMessage) # 验签 rsa.verify(须要验证的信息,加签事后的信息,公钥) # 若是须要验证的信息,是原信息,返回加密方式 veri_1 = rsa.verify('投资房地产'.encode(),signMessage, pubkey) print('投资房地产:',veri_1) # 若是须要验证的信息,不是原信息(表示信息被篡改过),则验证失败报错:Verification failed veri_2 = rsa.verify('投资互联网'.encode(),signMessage, pubkey) print('投资互联网,',veri_2)