Rabin加解密算法(python3)

Rabin加解密算法

详细代码如下:

# 空空
# dahouzi.cn
import random
from sympy import isprimedef decrypt_rabin(c, p, q):"""解密 Rabin 密文Args:c (int): 密文p (int): 素数 pq (int): 素数 qReturns:tuple: 解密结果 M1, M2, M3, M4"""n = p * q# 计算 m1, m2, m3, m4m1 = pow(c, (p + 1) // 4, p)m2 = (-m1) % pm3 = pow(c, (q + 1) // 4, q)m4 = (-m3) % q# 计算 a, ba = q * ModReverse(q, p)b = p * ModReverse(p, q)# 计算解密结果 M1, M2, M3, M4M1 = (a * m1 + b * m3) % nM2 = (a * m1 + b * m4) % nM3 = (a * m2 + b * m3) % nM4 = (a * m2 + b * m4) % nreturn M1, M2, M3, M4def ModReverse(a, n):"""计算模逆Args:a (int): 整数n (int): 模数Returns:int: a 在模 n 下的逆"""arr = [0, 1]gcd = EX_GCD(a, n, arr)if gcd == 1:return (arr[0] % n + n) % nelse:return -1def EX_GCD(a, b, arr):"""计算扩展欧几里得算法Args:a (int): 整数 ab (int): 整数 barr (list): 结果数组Returns:int: 最大公约数"""if b == 0:arr[0] = 1arr[1] = 0return ag = EX_GCD(b, a % b, arr)t = arr[0]arr[0] = arr[1]arr[1] = t - a // b * arr[1]return gdef rabin_encrypt(plaintext, p, q):"""Rabin 加密Args:plaintext (int): 明文p (int): 素数 pq (int): 素数 qReturns:int: 密文"""# 计算公钥 nn = p * q# 计算密文ciphertext = pow(plaintext, 2, n)return ciphertext# 示例用法p = 19
q = 23
plaintext = 183
ciphertext = rabin_encrypt(plaintext, p, q)
print("---------message-----------")
print("plaintext:", plaintext)
print("ciphertext:", ciphertext)print("---------public key[n]、private key[p、q]------------")
print("p:", p)
print("q:", q)
print("n:", p * q)
#print("---------公钥n、私钥p、q------------")# 解密
M1, M2, M3, M4 = decrypt_rabin(ciphertext, p, q)
print("---------Decrypt------------")
print("M1:", M1)
print("M2:", M2)
print("M3:", M3)
print("M4:", M4)
#print("---------解密------------")

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

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

相关文章

数据库管理工具,你可以用Navicat,但我选DBeaver!

大家好,我是豆小匠。数据库GUI工具哪家强,众人遥指Navicat。 可是Navicat老贵了。 如果公司有正版授权的还好,如果没有正版授权,还不给你用盗版,那才叫绝绝子。 好了,主角登场,DBeaver&#x…

Protege简单教程(安装启动建模推理)

Protege 是一个用于本体编辑和OWL (Web Ontology Language) 开发的开源工具。下面是一个简单的 Protege 使用教程。 1. 下载和安装 Protege 首先,需要下载 Protege。可以从官方网站 Protege 下载最新版本。 2. 启动 Protege 安装完成后,启动 Protege…

基于安卓android微信小程序美容理发店预约系统app

项目介绍 为美容院设计一个系统以减少员工的工作量就成为了想法的初始状态。紧接着对美容院进行进一步的调查发现我的想法已然落后。基本上每个美容院都以有了自己的信息系统,并且做的已经较完善了。 在这时我突然想到,现在关注美容养生的人越来越多&am…

智能井盖传感器建设信息化时代智慧城市

近年来随着信息技术的快速发展和城市化进程的加速推进,智慧城市的概念逐渐成为现实。作为智慧城市生命线建设中的重要组成部分,智能井盖传感器的应用正在为城市的可持续发展和居民的生活质量提供新的解决方案。 智能井盖传感器能够实时监测井盖状态&…

小程序如何刷新当前页面

小程序可以通过调用wx.pageScrollTo()方法来实现刷新当前页面,该方法可以滚动页面并使页面滚动到顶部,从而达到刷新页面的效果。具体的操作步骤如下: 在需要刷新的页面中添加一个按钮或其他触发事件的元素。 绑定相应的点击事件,…

vue3父组件提交校验多个子组件

实现功能&#xff1a;在父组件提交事件中校验多个子组件中的form 父组件&#xff1a; <script setup lang"ts">import {ref, reactive} from vueimport childForm from ./childForm.vueimport childForm2 from ./childForm2.vuelet approvalRef ref()let ap…

Avoiding Row-by-Row Processing 避免逐行处理

Avoiding Row-by-Row Processing 避免逐行处理 A set-based program and row-by-row processing are not mutually exclusive: some rules do call for rowby-row processing, but these rules are the exceptions. You can have a row-by-row component within a mostly set-…

图像分割方法

常见的图像分割方法有以下几种&#xff1a; 1.基于阈值的分割方法 灰度阈值分割法是一种最常用的并行区域技术&#xff0c;它是图像分割中应用数量最多的一类。阈值分割方法实际上是输入图像f到输出图像g的如下变换&#xff1a; 其中&#xff0c;T为阈值&#xff1b;对于物体的…

论文阅读:“iOrthoPredictor: Model-guided Deep Prediction of Teeth Alignment“

文章目录 IntroductionMethodologyProblem FormulationConditional Geometry GenerationTSynNetAligned Teeth Silhouette Maps Generation ResultsReferences Github 项目地址&#xff1a;https://github.com/Lingchen-chen/iOrthopredictor Introduction 这篇文章提出了一种…

国家开放大学平时作业训练题

卷代号&#xff1a;1400 机器人技术及应用 参考试题 一、单项选择题&#xff08;每小题3分&#xff0c;共45分&#xff09; 1.在变径轮和变形车轮的设计中&#xff0c;借鉴了&#xff08; &#xff09;的设计&#xff0c;使得车轮可以主动变形进行越障。 A.滑块机构 …

golang学习笔记——日志记录

文章目录 日志与错误log包记录到文件记录框架Contextual LoggingLeveled LoggingSetting Global Log Level Error Logging 日志与错误 通常&#xff0c;发生错误时&#xff0c;最终用户只会看到一条消息&#xff0c;指示程序出现问题。日志是简单错误消息以外的更多信息。 lo…

zookeeper学习记录

本文Java代码地址&#xff1a; https://gitee.com/blackjie_1/ljUp/tree/master/zookeeperDemo 个人博客网站&#xff1a;什么是快乐 基于docker 安装 拉取zookeeper 3.4.10 docker pull zookeeper:3.4.10启动服务端 docker run -d -p 2181:2181 -v /root/docker/zookeepe…

Vue3简单使用(一) --- 环境搭建

node版本管理工具nvm&#xff0c;nvm list、nvm use 14.18.0 可以简单启动服务器&#xff1a;npx serve 安装包&#xff1a;npm install xx1 xx2&#xff0c;npm install -D xx3 xx4 vue提供了多个版本 传统项目引入 全局构建版本 <div id"app"><button …

React自定义Hook之useRequest

一、简介 通过自定义hook&#xff0c;实现对http请求封装。 支持loading状态判断请求进度&#xff0c;支持获取请求正确和错误结果。 二、技术方案 use request hook export const useRequest (options) > {// 请求参数const [url, ...init] options;// 请求返回的数…

Flutter笔记:Matrix4矩阵变换与案例

Flutter笔记 Matrix4矩阵变换及其案例 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134474764 【简介…

【OpenCV】仿射变换中cv2.estimateAffine2D 的原理

目录 一、介绍 二、仿射变换矩阵 (M) 1.M中六个元素的说明 2.计算旋转角度 3.M的计算过程 三、输出状态 (inliers) 四、错切参数 1.错切参数的定义 2.错切参数例子 &#xff08;1&#xff09;水平错切 &#xff08;2&#xff09;垂直错切 一、介绍 cv2.estimateAffi…

深度学习系列54:使用 MMDETECTION 和 LABEL-STUDIO 进行半自动化目标检测标注

参考https://mmdetection.readthedocs.io/zh-cn/latest/user_guides/label_studio.html&#xff0c;这里进行简要概述&#xff1a; 1. 启动目标检测服务 在mmdetection文件夹中&#xff0c;执行 label-studio-ml start projects/LabelStudio/backend_template --with \ conf…

WIFI版本云音响设置教程腾讯云平台版本

文章目录 WIFI版本云音响设置教程腾讯云平台版本一、申请设备三元素1.腾讯云物联网平台2.创建产品3.设置产品参数4.添加设备5.获取三元素 二、设置设备三元素1.打开MQTTConfigTools2.计算MQTT参数3.使用windows电脑的WIFI连接到设备热点4.设置参数 三、腾讯云物联网套件协议使用…

gin相关操作--一起学习921190764

gin官方文档 https://gin-gonic.com/docs/quickstart/1. 安装 go get -u github.com/gin-gonic/ginhttps://github.com/gin-gonic/gin简单入门 package mainimport ("github.com/gin-gonic/gin""net/http" )func pong(c *gin.Context) {//c.JSON(http.S…

.NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !背景介绍 突然闯到路径搜索算法里…