首页 > 其他分享 >【web_逆向10】非对称加密之RSA

【web_逆向10】非对称加密之RSA

时间:2023-08-20 17:22:23浏览次数:39  
标签:web 公钥 加密 10 RSA key import 私钥

非对称加密

  • 非对称加密. 加密和解密的秘钥不是同一个秘钥. 这里需要两把钥匙. 一个公钥, 一个私钥. 公钥发送给客户端. 发送端用公钥对数据进行加密. 再发送给接收端, 接收端使用私钥来对数据解密. 由于私钥只存放在接受端这边. 所以即使数据被截获了. 也是无法进行解密的.
  • 常见的非对称加密算法: RSA, DSA等等, 下面我们就介绍一个. RSA加密, 也是最常见的一种加密方案

1、创建公钥跟私钥

  • 注意点:公钥、私钥一定要同时生成
from Crypto.PublicKey import RSA  # 处理秘钥对的.

# 生成密钥对
# 65537 是rsa的一个标志.
# 10001 十六进制的数字 => 65537
key = RSA.generate(2048)  # 默认的这个key是私钥
# # print(key.exportKey())  # 默认的输出格式是PEM格式
with open("private.pem", mode="wb") as f:
    f.write(key.exportKey())


with open("public.pem", mode="wb") as f:
    f.write(key.public_key().export_key())

'''
generate参数说明
    """Create a new RSA key pair.

    The algorithm closely follows NIST `FIPS 186-4`_ in its
    sections B.3.1 and B.3.3. The modulus is the product of
    two non-strong probable primes.
    Each prime passes a suitable number of Miller-Rabin tests
    with random bases and a single Lucas test.

    Args:
      bits (integer):
        Key length, or size (in bits) of the RSA modulus.
        It must be at least 1024, but **2048 is recommended.**
        The FIPS standard only defines 1024, 2048 and 3072.
      randfunc (callable):
        Function that returns random bytes.
        The default is :func:`Crypto.Random.get_random_bytes`.
      e (integer):
        Public RSA exponent. It must be an odd positive integer.
        It is typically a small number with very few ones in its
        binary representation.
        The FIPS standard requires the public exponent to be
        at least 65537 (the default).

    Returns: an RSA key object (:class:`RsaKey`, with private key).

    .. _FIPS 186-4: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf
    """
'''

2、加密、解密

# 加密
from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
import base64

ming = "请关注我的博客园".encode("utf-8")
# 需要公钥
# 从文件里读出来公钥
f = open("public.pem", mode="rb")
pub_key = RSA.import_key(f.read())

rsa = PKCS1_v1_5.new(key=pub_key)
result = rsa.encrypt(ming)
print(base64.b64encode(result).decode())

#解密
s = "ipFrgSNB+aPDO+wJb0GEdpy6rMRQxCsoiomb75z582KVjFL0l4iqd54BjAvEvmRHrGBVbWWMGvnwauLM/mdAgobxtvpLnY4EbdBCX4mUk1mlpAyjgDI76aNzRYA5Ii/2DrnygctUzgqomWYfNpa6d7GueYHbPfBmYl20sKs1pG41smHp/PP+DMUO3EwQKw4+wmoLQY21v3LB1ZkvjtcLGL3/LaTET8bDZiy67JcQjTc5r+aK/9gAW6YEFVB7L+kvUBU0cCpJ2evMLbUSmIzRXec4e48Dh1Ada0kqyyZxnq70o+b3Rd4bK2qQtuRxhDCRIcFY6mGu741hXtLTgV9VxA=="

mi_bs = base64.b64decode(s)
f = open("private.pem", mode="rb")
pri_key = RSA.import_key(f.read())

rsa = PKCS1_v1_5.new(key=pri_key)
ming_bs = rsa.decrypt(mi_bs, None)  # 第二个参数固定空的
print(ming_bs.decode("utf-8"))

标签:web,公钥,加密,10,RSA,key,import,私钥
From: https://www.cnblogs.com/xwltest/p/17644276.html

相关文章

  • 西农OJ P1073 阶乘TvT
    1073:阶乘题目描述给一个整数,请输出该数字阶乘的后缀0的个数,例如:数字7,它的阶乘为5040,后面有一个0,则输出1;还有数字10,它的阶乘为3628800,后面有两个0,则输出2。输入第一行一个数据N,小于100,表示一共要输入n个数字,以后n行输入一个数字。输出对应于每一个输入,输出一个满足题目要......
  • 西农OJ P1067 Humble Number
    1067:HumbleNumber题目描述如果一个数只有素数因子2,3,5,7,那么这个数被称为“HumbleNumber”。前20个“HumbleNumber”是:1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24,25,27。经验证,2000000000以内的“HumbleNumber”共有5842个。你的任务是编写一个程序,根据要求输出序列中的某一个数。如22,......
  • 西农OJ P1005 装载问题
    装载问题问题描述有两艘船,载重量分别是c1、c2,n个集装箱,重量是wi(i=1…n),且所有集装箱的总重量不超过c1+c2。确定是否有可能将所有集装箱全部装入两艘船。输入多个测例,每个测例的输入占两行。第一行一次是c1、c2和n(n<=10);第二行n个整数表示wi(i=1…n)。n等于0标志输入结束。......
  • 「C」2022/10/26晚学习总结
    2022/10/26晚学习总结主要内容范围:教材23章今晚浅学了一点点东西,记录一下.fma函数在math.h里,浮点数乘加,比自己手动算精度高.doublefma(doublex,doubley,doublez);返回值:x*y+zmemcpy函数在string.h里,内存复制,他和strcpy的区别是,他不仅仅能复制字符......
  • Linux笔记(银河麒麟V10)
    Linux下切换Python版本$whereispython$rm/usr/bin/python$ln-s/usr/bin/python3.6/usr/bin/python测试:$python--versionPython3.8.2安装Node.js-v18$curlhttps://nodejs.org/dist/v18.17.0/node-v18.17.0-linux-x64.tar.xz--outputnodejs18.tar.xz#......
  • esxi虚拟机安装群晖,并直通核显给群晖,实现核显硬解以N5105为例。
    n5105一直又个遗憾就是不能虚拟机安装群晖并硬解,之前的硬解方案大多数都是套娃式的解决方案,没有一个是可以真正实现群晖下直接硬解的。当然遗憾的还不是N5105,可以说英特尔11-13代的cpu的核显都是不被支持的,包括N6005、J6412、J6413、N100、N200、N305等都是一个情况。本次也是一......
  • 蓝桥杯Web笔记
    一、node.js1、概念(1)Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境,不是一门语言,也不是一个框架、库,而是一个JavaScript的运行环境。让JavaScript脱离了浏览器,能够允许开发人员在浏览器之外编写命令行工具和服务器端脚本例如:我们常关注的浏览器的兼容性,PC端和手机......
  • JavaWeb程序设计基础
    基础认识1、web技术简介(1)HTML:HTML1.0->HTML5.0(H5),标签是语法(2)CSS:样式表,让页面美起来(3)JavaScript:脚本,让页面动起来(4)DOM:元素的树结2、动态网页技术(1HTML是编制静态网页的基本语言(2)动态网页:可以根据访问者的不同需要,对访问者输入的信息提供不同响应的网页不同的人、不同的时间、不同的......
  • api分享103.216.155.x
    在日常生活中,我们有很多类似api场景,比如电脑需要调用手机里面的信息,这个时候会拿一个数据线将电脑和手机连接起来,电脑和手机连接数据线的接口就是我们所说的api接口。常见web接口是http/https协议的接口,API是处理系统之间数据传输的媒介。在API调用过程中,客户端会通过API发送请求,A......
  • Threejs搭建web3D场景
    今天发现之前都没有写一个关于搭建web端3D场景的介绍,这节补上:​了解ThreeJs之前先了解WebGL:(如果你已经了解了threeJs可以跳过这一章)WebGL(全写WebGraphicsLibrary)是一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGLES2.0结合在一起,通过增加OpenGLES2.0的一个JavaS......