from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.PublicKey import RSA
import base64

'''
单次加密串的长度最大为(key_size/8 - 11)
加密的 plaintext 最大长度是 证书key位数/8 - 11, 例如1024 bit的证书,被加密的串最长 1024/8 - 11=117,
解决办法是 分块 加密,然后分块解密就行了,
因为 证书key固定的情况下,加密出来的串长度是固定的。
'''

def rsa_long_encrypt(pub_key_str, msg):
    msg = msg.encode('utf-8')
    length = len(msg)
    default_length = 117
    #公钥加密
    pubobj = Cipher_pkcs1_v1_5.new(RSA.importKey(pub_key_str))
    #长度不用分段
    if length < default_length:
        return base64.b64encode(pubobj.encrypt(msg))
    #需要分段
    offset = 0
    res = []
    while length - offset > 0:
        if length - offset > default_length:
            res.append(pubobj.encrypt(msg[offset:offset+default_length]))
        else:
            res.append(pubobj.encrypt(msg[offset:]))
        offset += default_length
    byte_data = b''.join(res)

return base64.b64encode(byte_data)

def rsa_long_decrypt(priv_key_str, msg):
    msg = base64.b64decode(msg)
    length = len(msg)
    default_length = 128
    #私钥解密
    priobj = Cipher_pkcs1_v1_5.new(RSA.importKey(priv_key_str))
    #长度不用分段
    if length < default_length:
        return b''.join(priobj.decrypt(msg, b'xyz'))
    #需要分段
    offset = 0
    res = []
    while length - offset > 0:
        if length - offset > default_length:
            res.append(priobj.decrypt(msg[offset:offset+default_length], b'xyz'))
        else:
            res.append(priobj.decrypt(msg[offset:], b'xyz'))
        offset += default_length

return b''.join(res)

pyhton3 rsa长加密/解密相关推荐

  1. 加密解密_使用RSA密钥对加密解密数据

    使用RSA密钥对加密解密数据 作者: 郭政鸿 2021/1/6 前言: 前几天看了非对称加密, 那非对称加密处理常见的https中的应用, 平时我们可以用来做什么呢? 1. 生成RSA密钥对 使用op ...

  2. java rsa 117_java实现RSA非对称加密解密

    之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...

  3. RSA分段加密/解密 nodejs 和java联调

    RSA分段加密/解密 nodejs 和java联调 文章目录 RSA分段加密/解密 nodejs 和java联调 1 nodejs 环境 1.1 axios配置 1.2 API接口 1.3 业务 1. ...

  4. RSA算法加密解密举例

    RSA算法加密解密举例 使用如下数字字母对照表: 明文M="its all greek to me" ,p=47,q=59,e=17,求出其密文以及给出RSA 算法加/解密过程.( ...

  5. CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互

    (以下代码中都只做测试用,有些地方没有释放内存...这个自己解决下) 1.RSA非对称的,首先提供一个供测试用的证书和私钥的数据 1)pem格式的证书和私钥(公私钥是对应的)的base64编码 [cp ...

  6. java rsa 文件加密解密_RSA 加密、解密(自己生成加密解密文件)

    本文是自己阅读了网上的高人们的文章之后,实现功能后总结出来的,方便自己方便他人,不喜勿喷 加密解密需要生成公钥.私钥文件步骤 1.打开终端 输入 openssl 5F88AA4A-3913-4CBC- ...

  7. RSA非对称加密解密概念

    1.RSA加密解密在线计算网站 网站1:https://www.bejson.com/enc/rsa/ 网站2:https://the-x.cn/cryptography/Rsa.aspx 2.PKC ...

  8. Java实现RSA分段加密解密

    本文完成的是公钥加密,私钥解密(私钥加密公钥解密是一样的). 注意点: 秘钥生成的格式不同,使用算法也不同,公钥是X509EncodedKeySpec,私钥是PKCS8EncodedKeySpec. ...

  9. Java使用RSA进行加密解密【完美版本】;Data must not be longer than 117 bytes【不报此错误】

    Java使用RSA的公钥加密,私钥解密:私钥加密,公钥解密 import org.apache.commons.codec.binary.Base64; import org.slf4j.Logger ...

最新文章

  1. Android Wifi 主动扫描 被动扫描
  2. Material Design之ActionBar、ToolBar
  3. Educational Codeforces Round 2 B. Queries about less or equal elements
  4. 运营商线路细分_呼叫中心各种线路的区分
  5. 如何接地气地接入微前端?
  6. 基于水色图像的水质评价
  7. 一个免费调用的OData服务,无需用户名密码,适用于SAP UI5的学习
  8. junit5和junit4_JUnit 5符合AssertJ
  9. 使用线程——创建线程
  10. 关于js函数未定义not defined引发的感想
  11. 2020年中国网络安全市场全景图
  12. vagrant开启Xshell使用密码登录方式
  13. 谈谈文本匹配和多轮检索
  14. linux系统的磁盘挂载情况
  15. Java入门教程——下载JAVA
  16. MSN Message协议分析
  17. spss基本总结——聚类分析
  18. 服务器ssl证书在哪查看,https证书查看
  19. 选择与循环:剪刀石头布_剪刀石头布十大奢侈家具,创造高端精致生活就是这么简单!...
  20. Office系列---将Office文件(Word、PPT、Excel)转换为PDF文件,提取Office文件(Word、PPT)中的所有图片

热门文章

  1. 如何用手机打开dcm格式图片_手机也能当扫描仪用?如何用手机扫描图片?
  2. html渐变不兼容,CSS3实现文字渐变效果,兼容性最强系列!
  3. wps android qq 群,手机WPS怎样发送文档给QQ?WPS怎样发送文档给QQ教程
  4. python中with类的_在Python中使用`with`的不同类
  5. linux深度定制,专为国人订制!Linux Deepin新版发布
  6. 转载 mysql 数据库优化配置实例
  7. 【机器学习入门到精通系列】大规模机器学习图示
  8. python【Matlibplot绘图库】-主要概念
  9. 博途v15安装过程中提示出错_博途V15.1安装及无限重启和.net3.5SP1错误处理解决方法...
  10. opcache php 原理_php之Opcache