一、代码

# 导入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非对称加密模块rsa的更多相关文章

  1. 非对称加密算法RSA使用注意事项

    原文:非对称加密算法RSA使用注意事项 第一个问题,也是最重要的一个——RSA无法对超过117字节的数据进行加密!切记!其实也勿需要求对更大数据的加密,虽然网上已经有相关解决方案,比如BigInteg ...

  2. Java进阶(七)Java加密技术之非对称加密算法RSA

    Java加密技术(四)--非对称加密算法RSA 非对称加密算法--RSA 基本概念 非对称加密算法是一种密钥的保密方法. 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(priv ...

  3. 非对称加密算法-RSA算法

    一.概述 1.RSA是基于大数因子分解难题.目前各种主流计算机语言都支持RSA算法的实现 2.java6支持RSA算法 3.RSA算法可以用于数据加密和数字签名 4.RSA算法相对于DES/AES等对 ...

  4. Crypto++应用:非对称加密RSA

    1,非对称加密RSA: (1)乙方生成两把密钥(公钥和私钥).公钥是公开的,任何人都可以获得,私钥则是保密的. (2)甲方获取乙方的公钥,然后用它对信息加密. (3)乙方得到加密后的信息,用私钥解密. ...

  5. python的加密模块(md5,sha,crypt)学习

    python的加密模块(md5,sha,crypt)学习 命令行使用python MD5: yinguicai@Cpl-IBP-Product:~/data/work/svn/v1.4.0_dev/A ...

  6. JAVA 非对称加密算法RSA

    非对称加密算法 RSA过程 : 以甲乙双方为例 1.初始化密钥 构建密钥对,生成公钥.私钥保存到keymap中 KeyPairGenerator ---> KeyPair --> RSAP ...

  7. Java加密技术(四)非对称加密算法RSA

    RSA      这样的算法1978年就出现了.它是第一个既能用于数据加密也能用于数字签名的算法.它易于理解和操作.也非常流行.算法的名字以发明者的名字命名:Ron Rivest, AdiShamir ...

  8. 非对称加密算法RSA 学习

    非对称加密算法RSA 学习 RSA加密算法是一种非对称加密算法.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Ad ...

  9. python 加密 解密 签名 验证签名 公钥 私钥 非对称加密 RSA

    加密与解密,这很重要,我们已经可以用pypcap+npcap简单嗅探到网络中的数据包了.而这个工具其实可以嗅探到更多的数据.如果我们和别人之间传输的数据被别人嗅探到,那么信息泄漏,信息被篡改,将给我们 ...

随机推荐

  1. java oop第11章_反射、BaseDao的进一步改造

      引言:从Java5开始,Java中引用了一个新的概念反射,当程序运行时,能动态感知到程序中拥有的所以信息,这个获取信息的过程是采用反射机制来完成. 一.       Class类: Class类用 ...

  2. mysql数据库 --表操作

    一.表与表之间建关系 (1) 将所有的数据放在一张表内的弊端 表的组织结构不清晰 浪费存储时间 可扩展性极差 ---> 类似于将所有的代码写入到一个py文件中 -->解耦部分 (2) 如何 ...

  3. 换盘符cd的用法

    如果是在本盘内切换文件夹,直接使用cd 后面跟地址即可. 如果是跨区切换地址,cd 后面就需要跟/d,斜杠d, /d就代表着跨分区切换地址. cd /d d:\ C:\ProgramData\Anac ...

  4. 固定Linux虚拟IP地址

    由于我的开发环境是在VMWare虚拟机里安装Centos,然后在host文件中设置拦截,这样就可以直接跳转虚拟机的CentOS,但是虚拟机的IP地址总是会变,就要随时修改host文件,很麻烦.决定虚拟 ...

  5. centos8 安装vmware需要的内核头文件 kernel-headers.

    centos8 安装vmware需要的内核头文件 kernel-headers. uname -r (查看内核版本) rpm -qa kernel-headers (查看kernel-headers版 ...

  6. 本地仓库_remote.repositories(拒绝访问)

    问题描述: 通过阿里云配置本地的 Maven 仓库,使用 Maven 命令在进行打包.编译等一系列操作时候,总是出现提示某个 Jar 文件 ---> 『.....\ _remote.reposi ...

  7. Linux/Mac中alias的使用

    最近在设置代理的时候,每次手写不方便,想起linux有个alias命令可以用,防止忘记,这边记录一下 一.alias 设置 1.设置别名 proxy # 1. # 设置别名前,使用 `type 自定义 ...

  8. [转]C# 将类的内容写成JSON格式的字符串

    将类的内容写入到JSON格式的字符串中 本例中建立了Person类,赋值后将类中内容写入到字符串中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using System; ...

  9. win7 设置双屏壁纸

    http://dualmonitortool.sourceforge.net/ http://www.displayfusion.com/Features/Wallpaper/ 以第一个软件为例: 1 ...

  10. 关于合并pdf文件出现的问题

    输出端出现以下问题: PdfReadWarning: Xref table not zero-indexed. ID numbers for objects will be 解决方案: import ...