密码学实验三

news2024/12/23 10:16:12

第一题: 寻找满足特定条件的 e;
第一步:
在这里插入图片描述
第二步:
由式1.7知,给定e,p,q,就可计算出相应的RSA不动点的数目。因此设计算法步骤如下:

  1. 枚举找出所有与φ(n)互素的e。
  2. 枚举所有满足条件的e,计算RSA不动点的数目。
  3. 以RSA不动点的数目为键,累加变量为值,将每次的结果添加到字典中。
  4. 最后输出最小值的键对应的累加值。
    代码以及运行结果如下,结果为399788195976:
    在这里插入图片描述
import math
from collections import defaultdict
from tqdm import tqdm

def are_coprime(a, b):
    return math.gcd(a, b) == 1

p = 1009
q = 3643
n = p * q
phi = (p - 1) * (q - 1)

e_can = []
H = defaultdict(int)

for e in tqdm(range(1, phi)):
    if are_coprime(e, phi):
        e_can.append(e)
print('*'*50)

for e in tqdm(e_can):
    cnt = (1 + math.gcd(e-1, p-1))*(1 + math.gcd(e-1, q-1))
    H[cnt] += e

print(f'keyword: {H.keys()} and correspoding sum: {H[min(H.keys())]}')


第二题:
按部就班实现即可,其中求逆元用拓展欧几里得定理。
代码和运行结果如下:


import sympy
import binascii

def exgcd(a, b):
    if a == 0:
        return b, 0, 1
    else:
        gcd, x, y = exgcd(b % a, a)
        return gcd, y - (b // a) * x, x

def mod_inverse(a, m):
    gcd, x, _ = exgcd(a, m)
    if gcd != 1:
        raise Exception('Modular inverse does not exist')
    else:
        return x % m


def invmod(e, phi):
    '''
    >>> invmod(17, 3120)
    2753
    >>> invmod(3, 20)
    7
    '''
    return mod_inverse(e, phi)

def encrypt(m: int, e: int, n: int) -> int: 
    '''
    >>> encrypt(5, 3, 33)
    26
    '''
    return pow(m, e, n)

def decrypt(c: int, d: int, n: int) -> int:
    '''
    >>> decrypt(26, 7, 33)
    5
    '''
    return pow(c, d, n)

def str2hex(s):
    '''
    >>> str2hex("Hello, World!")
    '48656c6c6f2c20576f726c6421'
    '''
    return binascii.hexlify(s.encode()).decode()

def encstring(m: str, e: int, n: int) -> int:
    hexstr = str2hex(m)
    return encrypt(int(hexstr, 16), e, n)

p, q = sympy.randprime(2**128, 2**256), sympy.randprime(2**128, 2**256)
# p, q = 3, 11
n = p * q
phi = (p - 1) * (q - 1)

e = 3
e = 65537
assert(exgcd(e, phi)[0] == 1)
d = invmod(e, phi)

public = (e, phi)
private = (d, n)

test = 10
assert(test == decrypt(encrypt(test, e, n), d, n))
test = "Hello, World!"
assert(int(str2hex(test), 16) == decrypt(encstring(test, e, n), d, n))
print("test pass!")

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

c语言:模拟实现atoi函数

atoi函数的功能和用法&#xff1a; 主要功能&#xff1a;将字符串转换为整数。例如&#xff0c;将字符类型的“123”转换为整数123. #include <stdio.h> #include <stdlib.h>int main() {char str[] "123";int num atoi(str);printf("Converted …

刷题笔记12.01 贪心策略

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 说最大不超过.不用高精度,好说 #include <bits/stdc.h> using namespace std; int n,n2,a; long long a1[10004],a2[10004],sum; int main() {ios::sync_…

C++-设计一个特殊类

目录 一.设计一个类&#xff0c;不能被拷贝 二.设计一个类只能在堆上创建对象 三.设计一个类只能在栈上创建对象 四. 请设计一个类&#xff0c;不能被继承 五.请设计一个类&#xff0c;只能创建一个对象(单例模式) 1.单例模式&#xff1a; 2. 饿汉模式 一.设计一个类&#x…

C#中GDI+绘图应用(柱形图、折线图和饼形图)

目录 一、柱形图 1.示例源码 2.生成效果 二、折线图 1.示例源码 2.生成效果 三、饼形图 1.示例源码 2.生成效果 GDI绘制的一些常用的图形&#xff0c;其中包括柱形图、折线图和饼形图。 一、柱形图 柱形图也称为条形图&#xff0c;是程序开发中比较常用的一种图表技术…

【AI】数据集Dataloader制作

以花朵分类的数据集来进行测试。 Oxford 102 Flowers Dataset 是一个花卉集合数据集&#xff0c;主要用于图像分类&#xff0c;它分为 102 个类别共计 102 种花&#xff0c;其中每个类别包含 40 到 258 张图像。 该数据集由牛津大学工程科学系于 2008 年发布&#xff0c;相关论…

[原创]Delphi的SizeOf(), Length(), 动态数组, 静态数组的关系.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

中学老师求职简历(精选9篇)

以下简历内容以中学老师招聘需求为背景&#xff0c;我们整理并修改了9篇全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴&#xff0c;希望能帮助大家在众多候选人中脱颖而出。 中学老师简历下载&#xff08;可在下制作下载&#xff09;&#xff1a;百度幻主简…

表的创建和管理

表的创建和管理 一条数据的存储过程标识符的命名规则MySQL中的数据类型管理和创建数据库创建数据库使用数据库修改数据库 创建表创建方式1创建方式2查看数据表结构 修改表追加一个列修改一个列重命名一个列删除一个列 重命名表删除表清空表 一条数据的存储过程 存储数据是处理数…

pycharm closing卡住 解决办法

别处看到的&#xff0c;亲测有效 1.升级 pycharm 到 2023.3 2.pycharm 主页 Help -> Find Action -> 输入 Registry -> 禁用ide.await.scope.completion PyCharm 2023.1.2版本关闭后一直显示正在关闭项目 - 知乎

CentOS系统环境搭建(二十一)——安装git并且配置ssh拉取github代码

centos系统环境搭建专栏&#x1f517;点击跳转 文章目录 安装git并且配置ssh拉取github代码1.git初始配置2.设置ssh3.设置GitHub4.拉取代码 安装git并且配置ssh拉取github代码 1.git初始配置 安装 yum install git验证 git --version配置用户名&#xff08;记得用你自己的…

C++中异常的栈展开概念

C中的异常栈展开是指&#xff0c;当某个函数中有异常产生&#xff08;这里不考虑是主动抛出的还是被动产生的&#xff09;&#xff0c;在异常被捕获之前的函数调用链上&#xff0c;函数不会正常执行返回&#xff0c;即异常产生之后的程序逻辑不会被执行。 &#xff08;注意&…

HarmonyOS开发准备(一) TypeScript基本语法

HarmonyOS开发准备(一) TypeScript基本语法 TypsScript官网&#xff1a;https://www.typescriptlang.org/play 可在官网 Playround 在线运行 Typescript 一、变量声明 // 创建 number(数值) 类型变量 let test_number: number 111 console.log(test_number&#xff1a;, tes…

教你把ChatGPT训练抖音爆款文案(附提示词)

刚好有圈子同学问到&#xff1a;如何把ChatGPT训练成1个抖音爆款写手&#xff0c;相信很多小伙伴日常也存在类似需求&#xff0c;用好一个GPT&#xff0c;让月薪5K的小助理快速变成3万月薪的运营。本期就给大家安排一期ChatGPT教程。接下来手把手演示ChatGPT调教和提示词方式一…

福州大学《嵌入式系统综合设计》实验十三:RTSP拉流与RTMP推流

一、实验目的 掌握基于算能平台的JPEG压缩编码方法以及开发环境&#xff0c;包括开发主机环境搭建&#xff0c;硬件嵌入式开发板的连接&#xff0c;云平台的配置&#xff0c;编码程序的编译、运行等。 二、实验内容 搭建实验开发环境&#xff0c;并编写静止图像jpeg格式编解…

如何在Python中对Dynamsoft Barcode Reader性能进行基准测试

Dynamsoft Barcode Reader SDK一款多功能的条码读取控件&#xff0c;只需要几行代码就可以将条码读取功能嵌入到Web或桌面应用程序。这可以节省数月的开发时间和成本。能支持多种图像文件格式以及从摄像机或扫描仪获取的DIB格式。使用Dynamsoft Barcode Reader SDK&#xff0c;…

ThinkPHP 2.x任意代码执行漏洞

任务一&#xff1a; 复现环境中的代码漏洞 任务二&#xff1a; 尝试利用代码执行漏洞读取服务器web目录下的文件列表。 任务一&#xff1a; 1.搭建环境&#xff1a; 2.在php环境下直接输入{${phpinfo}}测试代码片段 2.写入一句话木马&#xff0c;用antsword连接&#xff0…

Java数据结构之《循环队列》题目

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我写完…

夯实c基础

夯实c基础 区别&#xff1a; 图一的交换&#xff0c;&#xff08;交换的是地址而不是两数&#xff09;无法实现两数的交换。 题干以下程序的输出结果为&#xff08; c  &#xff09;。 void fun(int a, int b, int c){ ca*b; } void main( ){ int…

【Unity】Blender场景导入

素材 下载场景&#xff1a;https://www.aplaybox.com/details/model/keDSIks72Qh3 blender文件导出为.fbx文件&#xff0c;路径选择复制&#xff08;做的过程太乱了不知道有没有影响&#xff09;&#xff0c;物理类型选择网格&#xff0c;勾选应用变换 blender下的物体长度是u…

openbabel 安装 生成指纹方法

今日踩坑小结&#xff1a; openbabel 安装&#xff1a; 可以装&#xff0c;但是得在 Linux 环境下&#xff0c;win 环境装会报错&#xff08;安装不会报错&#xff0c;但是生成指纹的时候会&#xff09; 指纹&#xff1a; 在下面这个链接里&#xff0c;官方给出了命令行调用 o…