首页 > 编程语言 >【RAS非对称加密算法】DEMO原理与示例

【RAS非对称加密算法】DEMO原理与示例

时间:2024-12-05 16:34:11浏览次数:3  
标签:公钥 私钥 示例 DEMO private key message public 加密算法

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP



# 生成 RSA 密钥对
def generate_rsa_keys():
    """
        公钥是通过特定算法从私钥导出的,可以安全地公开。
        公钥用于加密数据或验证签名。
        私钥用于解密数据或生成签名。
    """
    key = RSA.generate(2048)        # 生成 2048 位的 RSA 密钥
    private_key = key.export_key()  # 导出私钥
    public_key = key.publickey().export_key()  # 导出公钥
    return private_key, public_key


# 加密
def encrypt_message(message, public_key):
    """
        在加密时,公钥用于将明文信息转换为密文,只有与公钥对应的私钥才能解密密文。
        使用加密算法(如 PKCS1_OAEP)对明文进行加密,自动处理填充和转换为密文。
    """
    public_key = RSA.import_key(public_key)  # 导入公钥
    cipher = PKCS1_OAEP.new(public_key)      # 使用 PKCS1_OAEP 进行加密
    encrypted_message = cipher.encrypt(message.encode('utf-8'))
    return encrypted_message

# 解密
def decrypt_message(encrypted_message, private_key):
    """
        解密过程涉及使用私钥对通过公钥加密的密文进行还原。私钥与公钥在 RSA 加密过程中有明确的数学关系,确保只有私钥能解密由公钥加密的数据。
    """
    private_key = RSA.import_key(private_key)  # 导入私钥
    cipher = PKCS1_OAEP.new(private_key)       # 使用 PKCS1_OAEP 进行解密
    decrypted_message = cipher.decrypt(encrypted_message).decode('utf-8')
    return decrypted_message




# 测试
if __name__ == "__main__":
    # 生成密钥
    private_key, public_key = generate_rsa_keys()
    print("私钥:")
    print(private_key.decode())
    print("公钥:")
    print(public_key.decode())

    # 加密和解密
    message = "Hello, PyCryptodome!"
    print(f"\n原始消息: {message}")

    encrypted = encrypt_message(message, public_key)
    print(f"加密后的消息: {encrypted}")

    decrypted = decrypt_message(encrypted, private_key)
    print(f"解密后的消息: {decrypted}")

标签:公钥,私钥,示例,DEMO,private,key,message,public,加密算法
From: https://www.cnblogs.com/wanghong1994/p/18588854

相关文章

  • Python如何将Excel数据导入到MySQL数据库?详细教程与实战示例
    在数据处理和分析的过程中,我们常常需要将Excel数据导入到MySQL数据库中,以便进行更高效的查询和管理。那么,如何利用Python实现这一过程呢?本文将深入探讨Python将Excel数据导入到MySQL数据库的方法,并提供详细的教程和实战示例。无论您是初学者还是有经验的开发者,都可以通过本文掌......
  • ​‌Spring Boot中的@GetMapping注解可以用于处理HTTP GET请求,并且可以接收对象参数​
    下面内容来自Ai回答,经过亲自验证,正确 ‌SpringBoot中的@GetMapping注解可以用于处理HTTPGET请求,并且可以接收对象参数。‌接收对象参数的基本方式在SpringBoot中,可以通过@GetMapping注解接收对象参数,这通常通过@RequestParam或@RequestBody注解来实现。‌使用@Reque......
  • 实战示例:在报表中添加权限管控
    本文目录一:修改代码二、创建用户角色并测试三、对更改后的代码进行测试补充示例:给用户增加权限业务场景:需要给报表添加权限管控,没有工厂权限的用户使用该事务码查询不到对应的数据。一、修改代码①确定权限管控的位置:一般权限检查写在最开始,在STARTOFSELECTION部分;也......
  • RESTful API 简介(Python示例)
    RESTfulAPI是一种基于REST(RepresentationalStateTransfer,表述性状态转移)架构风格的接口设计方法。它通过HTTP协议提供对资源的访问和操作,具有简单、高效和可扩展的特点。REST的核心概念1.资源(Resource)•资源是RESTfulAPI的核心。•每个资源用一个唯一的U......
  • OSG开发笔记(三十七):OSG基于windows平台msvc2017x64编译器官方稳定版本OSG3.4.1搭建环境
    前言  自行编译的osg版本插件比较多,如果对版本没有特定要求,但是对环境编译器有特定要求,可以反向融合编译器符合要求的osg版本。 OSG下载过程  osg官网:http://www.osgchina.org        由于我们不使用osgQt模块,下载了也无所谓,反正不用,这里是osg3.6.4......
  • 物体检测(YOLO)示例:使用 Rust 调用 Python 进行物体检测
    在本示例中,我们将展示如何使用Rust调用Python脚本来完成YOLO物体检测任务。我们将通过Rust的std::process::Command调用Python脚本,并传递输入图像以进行检测。环境准备首先,您需要安装以下工具:更多内容访问ttocr.com或联系1436423940Rust语言:从Rust官网安装R......
  • elysia openai示例
    import'dotenv/config';import{Elysia,t}from'elysia';importOpenAIfrom'openai';constopenai=newOpenAI({apiKey:process.env.OPENAI_API_KEY,baseURL:process.env.OPENAI_API_BASE_URL,});constapp=new......
  • Android ping域名示例代码
    privatevalregex=Regex("""time=([\d.]+)""")/***@returnPair(Boolean,Int)boolean为ping是否成功int为ping的具体数值*/privatefunping(host:String):Pair<Boolean,Int>{valcommand="ping......
  • 目前最全的新能源汽车充电口识别,可识别特斯拉,ccs1,ccs2,ChadeMo,Type1,Type2等多种类型插
    目前最全的新能源汽车充电口识别,可识别特斯拉,ccs1,ccs2,ChadeMo,Type1,Type2等多种类型插口,支持YOLO,COCO,VOC三种标记,精确到91.1%数据集介绍:数据集一共3348图像 训练组67%        2244图片有效集10%        337图片测试集23%        7......
  • 9.在 Vue 3 中使用 OpenLayers 加载 Bing 地图示例(多种形式)
    前言随着地理信息技术的不断发展,地图应用在现代项目中的需求也日益增长。Bing地图提供了高质量的地图服务,包括矢量、卫星和混合标记等多种类型。OpenLayers是一款强大的开源地图框架,能让我们在项目中轻松实现地图加载与交互。本文将介绍如何在Vue3项目中使用OpenLayers......