python rsa库_python非对称加密模块rsa

#导入rsa库

importrsa.commonclassRSA(object):def __init__(self):

self.key= rsa.newkeys(256)

self.pub_key=rsa.PublicKey(self.key[1].n,self.key[1].e)

self.pri_key=rsa.PrivateKey(self.key[1].n,self.key[1].e,self.key[1].d,self.key[1].p,self.key[1].q)#rsa 加密

defrsa_encrypt_bytes(self,bytes_str):if notisinstance(bytes_str, bytes):returnNone

key_length= rsa.common.byte_size(self.key[1].n)

max_msg_length= key_length - 11count= len(bytes_str) //max_msg_lengthif len(bytes_str) % max_msg_length >0:

count= count + 1cry_bytes= b''

#rsa加密要以max_msg_length分组, 每组分别加密(加密的数据长度为key_length, 解密时每key_length长度解密然后相加)

for i inrange(count):

start= max_msg_length *i

size=max_msg_length

content= bytes_str[start: start +size]#rsa 分组 加密

crypto =rsa.encrypt(content, self.pub_key)

cry_bytes= cry_bytes +cryptoreturncry_bytes#rsa 解密, bytes_string是rsa_encrypt_hex, rsa_encrypt_bytes的返回值

defrsa_decrypt(self,bytes_string):

key_length= rsa.common.byte_size(self.key[1].n)if len(bytes_string) % key_length !=0:#如果数据长度不是key_length的整数倍, 则数据是无效的

returnNone

count= len(bytes_string) //key_length

d_cty_bytes= b''

#分组解密

for i inrange(count):

start= key_length *i

size=key_length

content= bytes_string[start: start +size]#rsa 分组 解密

d_crypto =rsa.decrypt(content, self.pri_key)

d_cty_bytes= d_cty_bytes +d_cryptoreturnd_cty_bytes#rsa 加密, 注意: 这里是传递的是16进制字符串

defrsa_encrypt_hex(self,hex_string):#bytes.fromhex字符串转十六进制方法

returnself.rsa_encrypt_bytes(bytes.fromhex(hex_string))#rsa 库的测试

deftest_encrypt_decrypt():#产生公钥私钥

(pub, pri) = rsa.newkeys(256)#构建新的公钥私钥

pubkey =rsa.PublicKey(pri.n, pri.e)

pri_key=rsa.PrivateKey(pri.n, pri.e, pri.d, pri.p, pri.q)

message= b'\x00\x00\x00\x00\x01'

#加密 message

crypto =rsa.encrypt(message, pubkey)#解密

d_crypto =rsa.decrypt(crypto, pri_key)print(d_crypto)if __name__ == '__main__':

r=RSA()

bts_str= 'hello world 中文'.encode()

crypto_bytes=r.rsa_encrypt_bytes(bts_str)

d_crypto_bytes=r.rsa_decrypt(crypto_bytes)print(d_crypto_bytes.decode())

hex_str= '001122334455AAff'crypto_bytes=r.rsa_encrypt_hex(hex_str)

d_crypto_bytes=r.rsa_decrypt(crypto_bytes)#bytes.hex()十六进制转字符串方法

print(d_crypto_bytes.hex())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值