RSA 加密方案

RSA 算法

  • RSA 加密和签名:因大整数因子分解难算,合数可成公钥。

    d - 私钥,e - 公钥,n - 可公开的合数,(e,n) 作为公钥可以公开,(d,n) 作为私钥。

详细理论证明参考:RSA算法原理(二)

假设明文消息为 M,密文为 C
加密过程: M e m o d n = C M^e\mod{n}=C Memodn=C
解密过程: C d m o d n = M C^d\mod{n}=M Cdmodn=M

RSA 签名举例

#-*- coding:utf-8 -*-
import random# 求最大公约数
def gcd(a, b):if a < b:return gcd(b, a)elif a % b == 0:return belse:return gcd(b, a % b)# 快速幂+取模
def power(a, b, c):ans = 1while b != 0:if b & 1:ans = (ans * a) % cb >>= 1a = (a * a) % creturn ans# 快速幂
def quick_power(a: int, b: int) -> int:ans = 1while b != 0:if b & 1:ans = ans * ab >>= 1a = a * areturn ans# 大素数检测
def Miller_Rabin(n):a = random.randint(2, n - 2)  # 随机第选取一个a∈[2,n-2]# print("随机选取的a=%lld\n"%a)s = 0  # s为d中的因子2的幂次数。d = n - 1while (d & 1) == 0:  # 将d中因子2全部提取出来。s += 1d >>= 1x = power(a, d, n)for i in range(s):  # 进行s次二次探测newX = power(x, 2, n)if newX == 1 and x != 1 and x != n - 1:return False  # 用二次定理的逆否命题,此时n确定为合数。x = newXif x != 1:  # 用费马小定理的逆否命题判断,此时x=a^(n-1) (mod n),那么n确定为合数。return Falsereturn True  # 用费马小定理的逆命题判断。能经受住考验至此的数,大概率为素数。# 卢卡斯-莱墨素性检验
def Lucas_Lehmer(num: int) -> bool:  # 快速检验pow(2,m)-1是不是素数if num == 2:return Trueif num % 2 == 0:return Falses = 4Mersenne = pow(2, num) - 1  # pow(2, num)-1是梅森数for x in range(1, (num - 2) + 1):  # num-2是循环次数,+1表示右区间开s = ((s * s) - 2) % Mersenneif s == 0:return Trueelse:return False# 扩展的欧几里得算法,ab=1 (mod m), 得到a在模m下的乘法逆元b
def Extended_Eulid(a: int, m: int) -> int:def extended_eulid(a: int, m: int):if a == 0:  # 边界条件return 1, 0, melse:x, y, gcd = extended_eulid(m % a, a)  # 递归x, y = y, (x - (m // a) * y)  # 递推关系,左端为上层return x, y, gcd  # 返回第一层的计算结果。# 最终返回的y值即为b在模a下的乘法逆元# 若y为复数,则y+a为相应的正数逆元n = extended_eulid(a, m)if n[1] < 0:return n[1] + melse:return n[1]# 按照需要的 bit 来生成大素数
def Generate_prime(key_size: int) -> int:while True:num = random.randrange(quick_power(2, key_size - 1), quick_power(2, key_size))if Miller_Rabin(num): # 大概率是素数return num# 生成公钥和私钥
def KeyGen(p: int, q: int):n = p * qe = random.randint(1, (p - 1) * (q - 1))while gcd(e, (p - 1) * (q - 1)) != 1:e = random.randint(1, (p - 1) * (q - 1))d = Extended_Eulid(e, (p - 1) * (q - 1))return n, e, ddef Sign(x: int, d: int, n: int) -> int:s = power(x, d, n)return sdef Verify(s: int, e: int, n: int) -> int:x_ = power(s, e, n)return x_if __name__ == '__main__':key_size = 512p = Generate_prime(key_size)q = Generate_prime(key_size)n, e, d = KeyGen(p, q)# 消息x = int(input("Message: "))if type(x) != int: raise ValueError("Must be an integer!")# 签名s = Sign(x, d, n)# 验证x_ = Verify(s, e, n)Valid = (x_ == x)# Attacks_ = random.randint(1, (p - 1) * (q - 1))m_ = random.randint(1, (p - 1) * (q - 1))# 记录print("p:\t", p)print("q:\t", q)print("Private Key↓")print("N:\t", n)print("d:\t", d)print("Public Key↓")print("N:\t", n)print("e:\t", e)print("Signature↓")print("s:\t", s)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/239845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.[BUU]warmup_csaw_20161

1.checksec 检查文件类型 ELF-64-little &#xff0c;无其他限权&#xff0c;直接用ida检查代码。 2.IDA进行反编译&#xff0c;进行代码审计 查看各个名称的内容&#xff1a; 了解基本攻击思路&#xff1a; 攻击思路&#xff1a;gets输入垃圾数据覆盖v5内容&#xff0c;再将s…

51单片机的羽毛球计分器系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机LCD1602显示模块按键等模块构成。适用于羽毛球计分、乒乓球计分、篮球计分等相似项目。 可实现基本功能: 1、LCD1602液晶屏实时显示比赛信息 2、按键控制比赛的开始、暂停和结束&#xff0c;以及两位选手分数的加减。 本项目同时包含器件清…

Ubuntu 常用命令之 fdisk 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 fdisk 是一个用于处理磁盘分区的命令行工具&#xff0c;它在 Linux 系统中广泛使用。fdisk 命令可以创建、删除、更改、复制和显示硬盘分区&#xff0c;以及更改硬盘的分区 ID。 fdisk 命令的常用参数如下 -l&#xff1a;列出所…

闪存驱动器与机械硬盘与固态硬盘

目录 U盘&#xff08;闪存驱动器&#xff09; 固态硬盘&#xff08;SSD&#xff09; 机械硬盘&#xff08;HDD&#xff09; 目前主流 U盘&#xff08;闪存驱动器&#xff09; U盘是便携式存储设备&#xff0c;内部采用闪存芯片作为存储介质。它们通常具有小巧轻便的外形&am…

spring bean 注入自身

加入这个注解即可&#xff0c;用于自己调用自己时仍包含事务使用 RequiredArgsConstructor(onConstructor __(Lazy))

【基于激光雷达的路沿检测用于自动驾驶的真值标注】

文章目录 概要主要贡献内容概述实验小结 概要 论文地址&#xff1a;https://arxiv.org/pdf/2312.00534.pdf 路沿检测在自动驾驶中扮演着重要的角色&#xff0c;因为它能够帮助车辆感知道可行驶区域和不可行驶区域。为了开发和验证自动驾驶功能&#xff0c;标注的数据是必不可…

已解决java.lang.NoClassDefFoundError异常的正确解决方法,亲测有效!!!

已解决java.lang.NoClassDefFoundError异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 文章目录 报错问题解决思路解决方法交流 报错问题 java.lang.NoClassDefFoundError 解决思路 java.lang.NoClassDefFoundError错误通常表示在运行Java程序…

Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类

目录 前言 1 电能质量数据集制作与加载 1.1 导入数据 1.2 制作数据集 2 CNN-2D分类模型和训练、评估 2.1 定义CNN-2d分类模型 2.2 定义模型参数 2.3 模型结构 2.4 模型训练 2.5 模型评估 3 CNN-1D分类模型和训练、评估 3.1 定义CNN-1d分类模型 3.2 定义模型参数 …

【ONE·MySQL || 基础介绍】

总言 主要内容&#xff1a;MySQL在Centos 7下的安装&#xff08;主要学习相关指令语句&#xff0c;理解安装操作是在做什么&#xff09;、对MySQL数据库有一个基础认识。 文章目录 总言0、MySQL的安装与卸载&#xff08;Centos 7&#xff09;0.1、MySQL的卸载0.1.1、卸载不必要…

JavaScript:Array数组去重

单数组 1.利用Array.from(new Set)去重&#xff1a; let list [1,2,3,4,5,5,5,6] let newList Array.from(new Set(list)) console.log(newList >> , newList); 2.利用includes去重 let list [1,2,3,4,5,5,5,6] let newList [] list.forEach((item) > {if (!ne…

HarmonyOS4.0系统性深入开发01应用模型的构成要素

应用模型的构成要素 应用模型是HarmonyOS为开发者提供的应用程序所需能力的抽象提炼&#xff0c;它提供了应用程序必备的组件和运行机制。有了应用模型&#xff0c;开发者可以基于一套统一的模型进行应用开发&#xff0c;使应用开发更简单、高效。 HarmonyOS应用模型的构成要…

【Amazon 实验①】使用 Amazon CloudFront加速Web内容分发

文章目录 实验架构图1. 准备实验环境2. 创建CloudFront分配、配置动、静态资源分发2.1 创建CloudFront分配&#xff0c;添加S3作为静态资源源站2.2 为CloudFront分配添加动态源站 在本实验——使用CloudFront进行全站加速中&#xff0c;将了解与学习Amazon CloudFront服务&…

CSS(五) -- 动效实现(立体盒子旋转-四方体+正六边)

一. 四面立体旋转 正方形旋转 小程序中 wxss中 <!-- 背景 --><view class"dragon"><!--旋转物体位置--><view class"dragon-position"><!--旋转 加透视 有立体的感觉--><view class"d-parent"><view …

linux分辨率添加

手动添加分辨率 注&#xff1a;添加分辨率需要显卡驱动支持&#xff0c;若显卡驱动有问题&#xff0c;则不能添加 可通过 xrandr 结果判断 # xrandr 若图中第二行” eDP“ 显示为 ” default “ &#xff0c;则显卡驱动加载失败&#xff0c;不能添加分辨率 1. 添加分辨率 # …

hiveserver负载均衡配置

一.安装nginx 参数我的另一篇文章&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/135152478 二.配置nginx服务参数 worker_processes 1; events { worker_connections 1024; } stream { upstream hiveserver2 { # least_conn; # 使用最少连接路由…

助力智能人群检测计数,基于DETR(DEtectionTRansformer)开发构建通用场景下人群检测计数识别系统

在一些人流量比较大的场合&#xff0c;或者是一些特殊时刻、时段、节假日等特殊时期下&#xff0c;密切关注当前系统所承载的人流量是十分必要的&#xff0c;对于超出系统负荷容量的情况做到及时预警对于管理团队来说是保障人员安全的重要手段&#xff0c;本文的主要目的是想要…

【uniapp小程序-生成二维码+多个图片文字合并一张图】

<!-- 二维码 --><canvas id"qrcode" canvas-id"qrcode" width"120" ></canvas><!-- 生成带小程序码的分享图片 --><canvas canvas-id"shareCanvas" class"share-canvas"></canvas>#qrc…

Unity网络同步方案帧同步和状态同步

网络同步方案 介绍开始我们使用的状态同步&#xff08;实时状态同步&#xff09;后来采用的帧同步 状态同步优点缺点 帧同步顺序执行追帧重连优点缺点 总结 这两年做的都是帧同步和状态同步的项目&#xff0c;正好最近有时间总结一下什么是帧同步和状态同步&#xff0c;之前在做…

内核地址消毒剂(KASAN)

概述 Kernel Address SANitizer(KASAN)是一种动态内存安全错误检测工具,主要功能是 检查内存越界访问和使用已释放内存的问题。 KASAN有三种模式: 通用KASAN 基于软件标签的KASAN 基于硬件标签的KASAN 用CONFIG_KASAN_GENERIC启用的通用KASAN,是用于调试的模式,类似于用户…

SolidKits.BOMs工具—BOM及焊件切割清单输出

SolidKits.BOMs工具—BOM及焊件切割清单输出包含自动出BOM&#xff0c;自定义模板&#xff0c;焊件切割清单的输出&#xff0c;虚拟件的输出等功能&#xff0c;使用该功能&#xff0c;无需打开SOLIDWORKS软件&#xff0c;可大大提高工作效率。为回馈新老客户&#xff0c;此工具…