码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 10行代码实现RSA公钥解密


    RSA常用场景是:

    1)生成公钥、私钥

    2)公钥加密,私钥解密

    3)私钥签名,公钥验签(返回成功or失败)

    以上场景实现比较简单,网上大把的文章,大部分加密库也都支持,我不再赘述。

    如果你遇到稀有场景4:

    私钥加密,公钥解密(返回明文):只拿到公钥,没有私钥

    百度和谷歌发现大部分文章给不了答案,浪费了很多时间

    那么不妨阅读一下本文章,或许可以得到答案或者启发。

     

    一、pycrypto 没能解决问题,但指出了可能解决的方向weixin_xyyqwl的博客_CSDN博客-性能,android,微服务、持续集成领域博主

    1、Package Crypto

    https://www.dlitz.net/software/pycrypto/api/current/Crypto-module.html

    cryto有3个子包和RSA相关

    2、Cipher在讲对称、非对称加密算法

     

     Crypto.Cipher.PKCS1_v1_5: 最接近目标场景4,但点进去却是场景2。

     

    3、同理阅读其他子包,也不满足场景4需求

    4、首页指出了方向weixin_xyyqwl的博客_CSDN博客-性能,android,微服务、持续集成领域博主

    This software is no longer maintained. | PyCrypto

     意思是pycrypto不再维护,被弃用,存在安全缺陷。如果新建代码,建议使用Cryptography

    如果是维护老的pycrypto项目,建议使用PyCryptodome​​​​​​

    weixin_xyyqwl的博客_CSDN博客-性能,android,微服务、持续集成领域博主

    二、cryptography

    Welcome to pyca/cryptography — Cryptography 38.0.0.dev1 documentation

    1、找到RSA的位置

     RSA — Cryptography 38.0.0.dev1 documentation

    2、基于左侧导航栏,找到RSA公钥类

     

    3、阅读公钥类的所有方法,recover_data_from_signature(signature, padding, algorithm)满足场景4:私钥加密,公钥解密(返回明文)weixin_xyyqwl的博客_CSDN博客-性能,android,微服务、持续集成领域博主

     4、那么怎样得到公钥类呢?weixin_xyyqwl的博客_CSDN博客-性能,android,微服务、持续集成领域博主

    第3种构造方式,满足场景4需求:只拿到公钥,没有私钥

     

     5、准备工作完毕,开始动手了,安装库

    Installation — Cryptography 38.0.0.dev1 documentation

    1. pip install cryptography
    2. pip install --upgrade cryptography

    6、写代码weixin_xyyqwl的博客_CSDN博客-性能,android,微服务、持续集成领域博主

    1. from cryptography.hazmat.primitives.asymmetric.rsa import RSAPublicNumbers
    2. import cryptography.hazmat.primitives.asymmetric.padding
    3. #https://blog.csdn.net/weixin_51380973
    4. #行1:输入公钥Modulus(n) https://blog.csdn.net/weixin_51380973
    5. n=int("BDBD8C45497213D6C11078DDAD11F2648213D9C91741DFFD8A036D118D75D06439A4E3647A39ECB18852D38C2469F97092823EA4C7527ECFA3EE26CCBE5883E2E2415DAB02ED57FD5A0AA074FF0CCAA3E5C12AE0D94FFD971F5F1B68D6DA789E64E3ACAF7638EC9A80AB186A4E7349C1EE75A6DA2A265286463956FF03BADA419E5D006D54B617284A30DE345DC0EC1CB08F838C7044CC913C057B2648AB07A1375D16C24581888159AA45F4DA4402D3B37F9BA6CF4FCC7550B1BF09C18132F6420408BED63C882060F07C9DDC5997866F2FCC5BDC335A6B55F379BC77E66508D91E852ECF39A57A1A92410775025C287188A4B4CFD073B2E68CE9851AFBE63F",16)
    6. #行2:输入公钥指数Public Exp(e) https://blog.csdn.net/weixin_51380973
    7. e=int("0x010001",16)
    8. #行3、4:获取公钥https://blog.csdn.net/weixin_51380973
    9. pbn=RSAPublicNumbers(e,n)
    10. puk=pbn.public_key()
    11. #行5:输入私钥加密后的数据https://blog.csdn.net/weixin_51380973 signature=bytes.fromhex("96E66624B6F87A186CA40EA55D4122B64DDF511AF30F283BEF3D474BEE2B9FAABC9193AFA805D55D2A1EF48C4E7DC39523934C08A0D1A98A96EB23F0E814AC8E7FAFA1D35ACA2C66D63CEEFEF6A237F2B0842FE8F6A426599228EABBEC82A71D57EA63EF9D98DDA01F728EE40B10EC42B83534A31B9C7758403E02D2DB82C25D7DD2AAF0C6E01D6869DF53C8B43C5131A52C4E94C2539F6C5D45766B56280AA7FFE9BDFF0D0C795AA56583D9313027FED88F27347229D8E9C92510E642EACE3756C8BBA0A243A988D8F739151B95EDEB0A3F8012CC1AC7E35DF2842D8E555734DFDC1C94933860E8087D083534A8C75F85759C37D12E001DE1B89B17765FFC45")
    12. #行6:输入填充模式padding mode https://blog.csdn.net/weixin_51380973
    13. padding=cryptography.hazmat.primitives.asymmetric.padding.PKCS1v15()
    14. #行7:输入算法https://blog.csdn.net/weixin_51380973
    15. algorithm=None
    16. #行8:得到原始二进制数据https://blog.csdn.net/weixin_51380973
    17. bdata=puk.recover_data_from_signature(signature, padding, algorithm)
    18. #行9:转成16进制大写数据https://blog.csdn.net/weixin_51380973
    19. hdata=bdata.hex().upper()
    20. #https://blog.csdn.net/weixin_51380973

  • 相关阅读:
    一文带你搞懂Redis持久化
    窗口函数实战指南:轻松掌握排名计算技巧,提升数据处理效率
    运维工程师面试题及答案(网络运维工程师面试题)
    2022深圳杯D题思路:复杂水平井三维轨道设计
    视频云存储平台LntonCVS国标视频平台功能和应用场景详细介绍
    Malicious Secure MPC
    JavaEE-多线程-CAS
    【LLM工程篇】deepspeed | Megatron-LM | fasttransformer
    ESP8266 做简单的仪器
    【Spring Boot】如何在Linux系统中快速启动Spring Boot的jar包
  • 原文地址:https://blog.csdn.net/weixin_51380973/article/details/126383733
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号