Python 实现 RAS 加解密(ras模块,pycrypto模块)

2023-10-30

一,pycrypto / pycryptodome模块

 1. 模块安装说明

crypto这个模块的安装有点小坑,需要注意。

crypto,pycrypto,pycryptodome的功能是一样的。crypto与pycrypto已经没有维护了

所以,直接都用 pycryptodome 就行了,安装命令如下
 

pip install pycryptodome

2. 公钥私钥的生成

from Crypto import Random
from Crypto.PublicKey import RSA

"""
generate(bits, randfunc=None, e=65537) 有三个参数,

bits 是一个字节大小的值,通常是1024,2048, 3072这三个。

randfunc 是一个随机函数,默认是 Crypto.Random.get_random_bytes ,可以自己设置,也可以保持默认。

e=65537 是公共 RSA 指数


"""
random_generator = Random.new().read         #实例化一个随机生成值的对象
rsa = RSA.generate(1024, random_generator)   #实例化一个对象 rsa

private_key = rsa.exportKey()                # 生成私钥
print(private_key.decode('utf-8'))

public_key = rsa.publickey().exportKey()     # 生成公钥
print(public_key.decode('utf-8'))

公钥指数是可以随意选取的,但是为了提高RSA的加密速度,实际使用中公钥指数最长用的三个值是3、17、65537(爬虫逆向时经常遇到,作为偏移量在JS代码中经常以二进制方(”10001“)式出现 , 如 setPublic(me.rsaPubkey, "10001"))。

PEM建议用3。PKCS#1建议用3或65537。X.509建议用65537。这样选取主要是为了提高加密或签名验证的性能,因为3、17或65537分别只需要2或17次模乘运算,而一个随机选择的e(假设n是1024-bit)则大约需要1000次模乘运算。这种方法刻意把公钥指数选的小一点,其对应私钥指数就会很大,这么做的目的是节约公钥运算的时间。因为正常使用中都是用公钥加密,所以需要节约大部分人的时间。而极少部分人也会选用私钥解密,那么就只能少数服从多数了。

3. 使用 公钥加密 和 使用私钥解密

import Crypto.PublicKey.RSA
import Crypto.Cipher.PKCS1_v1_5
import Crypto.Random


def encrypt(msg):
    
    public_key = " "                            # 逆向时找到的公钥
    cipher = PKCS1_cipher.new(public_key)       # 生成一个加密的类
    encrypt_text = base64.b64encode(cipher.encrypt(msg.encode()))  # 对数据进行加密
    return encrypt_text.decode()                # 对文本进行解码码


def decrypt_data(encrypt_msg):

    private_key = get_key('rsa_private_key.pem')  # 读取私钥信息
    cipher = PKCS1_cipher.new(private_key)        # 生成一个解密的类
    back_text = cipher.decrypt(base64.b64decode(encrypt_msg), 0)  # 进行解密
    return back_text.decode()                     # 对文本内容进行解码

二,rsa 模块使用

 1,  安装命令如下

pip install rsa

2 , 公钥私钥的生成

import rsa
 
public, private = rsa.newkeys(1024)     # 生成公钥、私钥

with open("./private.pem", "wb") as x:  # 保存私钥
    x.write(private.save_pkcs1())

with open("./public.pem", "wb") as x:   # 保存公钥
    x.write(public.save_pkcs1())

3. 使用 公钥加密 和 使用私钥解密

import rsa
 
str = b"yaogepachong"
with open("public.pem", 'rb') as x:
    public_key = rsa.PublicKey.load_pkcs1(x.read())
    cipher_text = rsa.encrypt(str, public_key)     # 使用公钥加密
with open("private.pem", 'rb') as x:
    private_key = rsa.PrivateKey.load_pkcs1(x.read())
    text = rsa.decrypt(cipher_text, private_key)   # 使用私钥解密

三,微博 和 某宝 登录 加密 可以用如下代码 实现

import rsa
import binascii
import base64

def get_password(message, e='10001'):
    """
    RSA加密用户密码
    e 是偏移量 ,RSA默认的指数(65537的二进制就是10001)
    binascii.b2a_hex(crypto).decode() 把加密得到的二进制结果转为16进制字符串
    """
    n = ' '                                           # 逆向找到的公钥
    pub_key = rsa.PublicKey(int(n, 16), int(e, 16))
    crypto = rsa.encrypt(message.encode('utf8'), pub_key)
    return binascii.b2a_hex(crypto).decode(),         # base64.b64encode(crypto)


print(get_password('1675154786\t3497B2\n嘟嘟嘟231dyu'))

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 实现 RAS 加解密(ras模块,pycrypto模块) 的相关文章

随机推荐

  • Qt Charts简介

    文章目录 一 图标类型Charts分类 1 折线图和样条曲线图 2 面积图和散点图 3 条形图 4 饼图 5 误差棒图 6 烛台图 7 极坐标图 二 坐标轴Axes类型分类 三 图例 四 图表的互动 五 图表样式主题 一 图标类型Chart
  • Linux软链接硬链接的区别

    ln是linux中又一个非常重要命令 它的功能是为某一个文件在另外一个位置建立一个同步的链接 当我们需要在不同的目录 用到相同的文件时 我们不需要在每一个需要的目录下都放一个必须相同的文件 我们只要在某个固定的目录 放上该文件 然后在 其它
  • vscode链接AutoDL,并使用xtfp7传输文件

    1 AutoDL简介 AutoDL是一个GPU租赁平台 便宜好用 点击下面的链接注册即可 学生邮箱认证有优惠 4090 3090显卡都有还有3060 3080 TITAN Xp等等 AutoDL 品质GPU租用平台 租GPU就上AutoDL
  • 深度图拼接

    度量变换 图像拼接 检测深度图 国科大图像处理实验 度量变换 图像拼接 检测深度图 国科大图像处理实验 Root dobby的博客 CSDN博客 问题描述 目录hw3下有立体视觉对应的两幅图像view1 png和view5 png 图像来源
  • 家用电脑可以用做服务器吗

    家用电脑的结构与服务器的结构是相同的 家用电脑是可以用来搭建服务器使用 但使用家用电脑做服务器在稳定性会比服务器差很多 1 家用电脑没有公网IP 网络运营商分配的IP重启路由之后是会变化 不固定 服务器运行是需要有固定IP让人连接访问 使用
  • Ngui 五种点击事件实现方式

    ngui作为unity界面插件之一中 无疑是最好用 使用最多的了从自学unity到现在界面一直使用它 由于它的持续更新 我在此不得不说 确实很为开发者作想 为什么这么讲呢 大概在去年吧 当时用的那个版本已经不记得了 反正就是有个需求 要实现
  • HTC相关开发所需SDK等工具都在这里了

    HTC相关开发所需SDK等工具都在这里了 转 OpenVR SDKhttps github com ValveSoftware openvr OpenVR SDK是由原本的SteamWorks SDK更新而来 新增对HTC VIVE开发者版
  • 时间格式转换LongToString

    import java util Calendar import java util Date import org apache commons lang3 StringUtils import org apache commons la
  • 3.Qt消息机制和事件

    9 Qt消息机制和事件 好文来自https www cnblogs com weizhixiang p 5824345 html 一 事件 鼠标 敲下键盘 或者是窗口需要重新绘制的时候 都会发出一个相应的事件 Qt 程序需要在main 函数
  • 人工智能在游戏开发中的应用:你目前所需的 6 大 AI 工具

    游戏体量越大 质量越高 所要求的标准就越严格 尤其是在 AAA 级游戏市场 任何失误都可能导致你陷入极其棘手的境地 影响玩家体验 进而招致恶评 随着对游戏的需求和预期不断攀升 游戏开发人员比以往任何时候都需要更多帮助 那么 他们如何才能紧跟
  • Consumer位移管理-Kafka从入门到精通(十一)

    上篇文章说了 sesstion time out max poll interval ms max poll records和auto offset reset等参数 KafkaConsumer Kafka从入门到精通 十 https bl
  • eclipse如何创建多层包(多级包)

    包是Java中一个非常重要的概念 实质上包就是一个文件夹 我们在每次创建工程之前 要将不同的类放在不同的包里 以方便管理和避免类名重复所带来的麻烦 以后在使用其他包的类时 只需要使用 import 关键字进行包含就可以了 那么 在eclip
  • HTTPS 证书认证具体流程

  • Appium自动化框架从0到1之 日志文件配置(log.conf)

    在config文件中 我们先把log的输出格式 输出路径等参数抽离出来作为一个配置表 这个写法 在selenium自动化框架中 是没有分离的 所以 我们有get到一个新方法 代码如下 log conf loggers keys root i
  • C#中Console.WriteLine()的用法

    C 中Console WriteLine 的用法 以前用Console WriteLine 的时候就只会用它直接输出string字符串 但后来发现它还有其它在有些场合下会十分方便的输出方法 这篇就记录一下这些方法的使用吧 代码格式我就不写了
  • 向HashSet中添加元素的过程:

    向HashSet中添加元素的过程 1 当向 HashSet 集合中存入一个元素时 HashSet 会调用该对象的 hashCode 方法来得到该对象的 hashCode 值 然后根据 hashCode 值 通过某种散列函数决定该对象在 Ha
  • 微信小程序实战八:优惠券页面的实现

    文章目录 1 效果预览 2 wxml布局 3 js逻辑 4 样式设置 1 效果预览 2 wxml布局 顶部tab切换
  • cucumber ,运行feature一直提示 Undefined step: Given login baidu

    Undefined step Given login baidu You can implement missing steps with the snippets below Given login baidu public void l
  • 软件测试员必知!压力测试总共需要几个步骤?思路总结篇

    在运维工作中 压力测试是一项很重要的工作 比如在一个网站上线之前 能承受多大访问量 在大访问量情况下性能怎样 这些数据指标好坏将会直接影响用户体验 今天我们就来深入了解下压力测试 首先 什么是压力测试 软件压力测试是一种基本的质量保证行为
  • Python 实现 RAS 加解密(ras模块,pycrypto模块)

    一 pycrypto pycryptodome模块 1 模块安装说明 crypto这个模块的安装有点小坑 需要注意 crypto pycrypto pycryptodome的功能是一样的 crypto与pycrypto已经没有维护了 所以