python非对称加密模块rsa
2023-09-14 09:00:36 时间
一、代码
# 导入rsa库 import rsa.common class RSA(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 加密 def rsa_encrypt_bytes(self,bytes_str): if not isinstance(bytes_str, bytes): return None key_length = rsa.common.byte_size(self.key[1].n) max_msg_length = key_length - 11 count = len(bytes_str) // max_msg_length if len(bytes_str) % max_msg_length > 0: count = count + 1 cry_bytes = b'' # rsa加密要以max_msg_length分组, 每组分别加密(加密的数据长度为key_length, 解密时每key_length长度解密然后相加) for i in range(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 + crypto return cry_bytes # rsa 解密, bytes_string是rsa_encrypt_hex, rsa_encrypt_bytes的返回值 def rsa_decrypt(self,bytes_string): key_length = rsa.common.byte_size(self.key[1].n) if len(bytes_string) % key_length != 0: # 如果数据长度不是key_length的整数倍, 则数据是无效的 return None count = len(bytes_string) // key_length d_cty_bytes = b'' # 分组解密 for i in range(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_crypto return d_cty_bytes # rsa 加密, 注意: 这里是传递的是16进制字符串 def rsa_encrypt_hex(self,hex_string): # bytes.fromhex字符串转十六进制方法 return self.rsa_encrypt_bytes(bytes.fromhex(hex_string)) # rsa 库的测试 def test_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())
相关文章
- Python基础24-MySQL模块pymysql
- Python 人工智能 5秒钟偷走你的声音
- 浙江新增python编程_9月起,浙江省八年级新增Python编程课,未来编程是处理大数据的手段…「建议收藏」
- 标准正态分布的分布函数服从均匀分布_python 正态分布
- Python贪吃蛇小游戏_Python贪吃蛇代码
- Python文件名后缀_python获取目录下所有文件的文件名
- 分享一个口碑炸裂的Python可视化模块,简单快速入手!!
- 人生苦短,我用Python-手把手教你如何使用python写串口调试助手
- 【错误记录】PyCharm 运行 Python 程序报错 ( UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe5 in positio )
- Python基础语法-内置函数和模块-hashlib
- 为什么用 Java:一个 Python 程序员告诉你详解编程语言
- 使用Python访问并下载网页内容的代码详解编程语言
- python任意进制加法详解编程语言
- 使用Python执行Linux命令的方法(python调用linux命令)
- python的re模块详解编程语言
- 快速安装Python MySQL模块(python安装mysql模块)
- Python与Java曝漏洞,黑客利用FTP注入攻击可绕过防火墙
- Python实现Oracle数据库连接(python连接oracle数据库)
- Linux系统下安装Python模块指南(linux安装python模块)
- Python操作MySQL数据库的必备模块mysqlpython(mysql_python)
- python发送邮件接收邮件示例分享
- 从零学python系列之新版本导入httplib模块报ImportError解决方案
- Python中if__name__=="__main__"详细解释
- python文件和目录操作函数小结