Python使用RSA库加密和解密_第1页
Python使用RSA库加密和解密_第2页
Python使用RSA库加密和解密_第3页
Python使用RSA库加密和解密_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Python使用RSA库加密和解密#先生成一对密钥,然后保存.pem格式文件,当然也可以直接使用

(pubkey,privkey)=rsa.newkeys(1024)

pub=pubkey.save_pkcs1()

pubfile=open('public.pem','wb')

pubfile.write(pub)

pubfile.close()

pri=privkey.save_pkcs1()

prifile=open('private.pem','wb')

prifile.write(pri)

prifile.close()

#load公钥和密钥

message=''

withopen('public.pem',"rb")aspublickfile:

p=publickfile.read()

pubkey=rsa.PublicKey.load_pkcs1(p)

print(pubkey)

withopen('private.pem',"rb")asprivatefile:

p=privatefile.read()

privkey=rsa.PrivateKey.load_pkcs1(p)

print(privkey)

#用公钥加密、再用私钥解密

crypto=rsa.encrypt(message.encode('utf-8'),pubkey)

message=rsa.decrypt(crypto,privkey)

message=message.decode('utf-8')

print(message)

#sign用私钥签名认证、再用公钥验证签名

signature=rsa.sign(message.encode('utf-8'),privkey,'SHA-1')

verify=rsa.verify(''.encode('utf-8'),signature,pubkey)

print(verify)

二、使用Crypto.PublicKey.RSA库

1、使用Crypto.PublicKey.RSA生成公钥、私钥:

importCrypto.PublicKey.RSA

importCrypto.Random

x=Crypto.PublicKey.RSA.generate(2048)

#Crypto.PublicKey.RSA.generate(2048,Crypto.Random.new().read)使用Crypto.Random.new().read伪随机数生成器

a=x.exportKey("PEM")#生成私钥

b=x.publickey().exportKey()#生成公钥

withopen("a.pem","wb")asx:

x.write(a)

withopen("b.pem","wb")asx:

x.write(b)

2、使用Crypto.PublicKey.RSA.importKey(private_key)生成公钥和证书:

importCrypto.PublicKey.RSA

withopen("a.pem","rb")asx:

xx=Crypto.PublicKey.RSA.importKey(x.read())

b=xx.publickey().exportKey()#生成公钥

withopen("b.pem","wb")asx:

x.write(b)

a=xx.exportKey("DER")#生成DER格式的证书

withopen("a.der","wb")asx:

x.write(a)

3、使用Crypto进行RSA加解密

importCrypto.PublicKey.RSA

importCrypto.Cipher.PKCS1_v1_5

importCrypto.Random

importCrypto.Signature.PKCS1_v1_5

importCrypto.Hash

y=b"abcdefg1234567"

withopen("b.pem","rb")asx:

b=x.read()

cipher_public=Crypto.Cipher.PKCS1_v1_5.new(Crypto.PublicKey.RSA.importKey(b))

cipher_text=cipher_public.encrypt(y)#使用公钥进行加密

withopen("a.pem","rb")asx:

a=x.read()

#如果私钥有密码则使用相应密码Crypto.PublicKey.RSA.importKey(a,password)

cipher_private=Crypto.Cipher.PKCS1_v1_5.new(Crypto.PublicKey.RSA.importKey(a))

text=cipher_private.decrypt(cipher_text,Crypto.Random.new().read)#使用私钥进行解密

asserttext==y#断言验证

withopen("c.pem","rb")asx:

c=x.read()

c_rsa=Crypto.PublicKey.RSA.importKey(c)

signer=Crypto.Signature.PKCS1_v1_5.new(c_rsa)

msg_hash=Crypto.Hash.SHA256.new()

msg_hash.update(y)

sign=signer.sign(msg_hash)#使用私钥进行'sha256'签名

withopen("d.pem","rb")asx:

d=x.read()

d_rsa=Crypto.PublicKey.RSA.importKey(d)

verifer=Crypto.Signature.PKCS1_v1_5.new(d_rsa)

msg_hash=Crypto.Hash.SHA256.new()

msg_ha

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论