Wilson's theorem在RSA题中运用
引言
- 最近一段时间在再练习数论相关的密码学题目,自己之前对于数论掌握不是很熟练,借此机会先对数论基本的四大定理进行练习
- 这次的练习时基于Wilson's theorem(威尔逊定理)在RSA题目中的练习
- 最近几次比赛中这个定理出现频率挺高的,正好之前Rocarctf中有一道题考到了这个定理这次就用于练习
Wilson's theorem简介
- P 为质数 <==>(P−1)!≡ −1(mod P)
- 推论 & 变形式:
 (p-1)! + (p-2) != p * (p-2)!
 (p-1)! = p * (p-1)
 (p-2)! % p = 1
- 这个定理作用就是在于可以将阶乘的复杂问题转换成为连乘的简单问题
实例练习
题目代码
import sympy
import random
def myGetPrime():
A= getPrime(513)
print(A)
B=A-random.randint(1e3,1e5)
print(B)
return sympy.nextPrime((B!)%A)
p=myGetPrime()
#A1=xxx
#B1=xxx
q=myGetPrime()
#A2=xxx
#B2=xxx
r=myGetPrime()
n=p*q*r
#n=xxx
c=pow(flag,e,n)
#e=0x1001
#c=xxx
#so,what is the flag?
具体代码可以在buuctf平台找到
思路分析
- 对于素数 - p,q的获取是用- B!%A后在获取其下一个素数实现,而问题的难处也在于大数- B在阶乘后运算的复杂度,所以这里就要采用威尔逊定理将阶乘问题转换成连乘问题,即对于例如- q!%p=>(q+1)*…….*(p-2)%p
- 推导过程大致如下: 
 由上述代码可以得出以下式子:
 1、- myGetPrime()函数的返回结果记为\(d_1\)
 2、- R=randint(le3,le5)\(10^3\) ~ \(10^5\)的任意整数
 3、\(B=A-R\)
 4、\(d_1≡B!%A\)
- \((A-2)! = (A-2)(A-1)……(A-R+1)(A-R)!\)阶乘展开 
- 由上述第三个变型式可得\((A-2)!%A ≡ 1⇒(A-2)(A-1)……(A-R+1)(A-R)!%A≡1\) 
 ⇒\((A-2)(A-1)……(A-R+1)B!%A≡1\)
 =>\(B!\)和\((A-2)*…*(B+1)\)是乘法逆元的关系,故而可以通过连乘模\(A\)求出\(B!\)而,此题中对于\(p\)的结果是- next_prime(d1),所以最终- p=invert(d1,A1)
最终exp
#!/usr/bin/python
# -*- coding:utf-8 -*-
# Author : Konmu
import gmpy2
from Crypto.Util.number import *
n=xxx
e=xxx
c=xxx
A1=xxx
B1=xxx
A2=xxx
B2=xxx
def Wilson(A,B):
mod = 1
for i in range(B+1,A-1):
mod *= i
mod %= A
return mod #这个就是B!
d1=int(gmpy2.invert(Wilson(A1,B1),A1))
d2=int(gmpy2.invert(Wilson(A2,B2),A2))
q=gmpy2.next_prime(d1)
p=gmpy2.next_prime(d2)
r=n/p/q
phi=(r-1)*(p-1)*(q-1) #三个素数求欧拉函数处理
d=gmpy2.invert(e,phi)
m=pow(c,d,n)
print(long_to_bytes(m))
总结
- 最近主要是对于基本的数论的四个定理的学习,还有就是python 每日一个小项目练习和flask框架学习,基本web知识学习
Wilson's theorem在RSA题中运用的更多相关文章
- 在洛谷3369 Treap模板题 中发现的Splay详解
		本题的Splay写法(无指针Splay超详细) 前言 首先来讲...终于调出来了55555...调了整整3天..... 看到大部分大佬都是用指针来实现的Splay.小的只是按照Splay的核心思想和原 ... 
- Wilson's Theorem
		ProofsSuppose first that $p$ is composite. Then $p$ has a factor $d > 1$ that is less than or equ ... 
- 【经验】 Java BigInteger类以及其在算法题中的应用
		[经验] Java BigInteger类以及其在算法题中的应用 标签(空格分隔): 经验 本来在刷九度的数学类型题,有进制转换和大数运算,故而用到了java BigInteger类,使用了之后才发现 ... 
- Java在算法题中的输入问题
		Java在算法题中的输入问题 在写算法题的时候,经常因为数据的输入问题而导致卡壳,其中最常见的就是数据输入无法结束. 1.给定范围,确定输入几个数据 直接使用普通的Scanner输入数据范围,然后使用 ... 
- 数据流图——从软考真题中学画数据流图DFD
		文章目录 题目 画顶层图 画0层图 解题技巧 题目 建议将题目复制到word后与此文分屏查看.后面需要多次查看题目. 某高校欲开发一个成绩管理系统,记录并管理所有选修课程的学生的平时成绩和考试成绩, ... 
- 你竟然在公钥中下毒!——如何在RSA公钥中添加后门
		原文:http://www.hackdig.com/?01/hack-17893.htm 分享到: 当我知道它是如何运行时,我惊得下巴都掉了.这是一个非常简单的手法,但这篇文章会颠覆你之前对RSA的看 ... 
- 运维派 企业面试题3 为上题中的 "十个随机字母_test.html" 文件 更名
		Linux运维必会的实战编程笔试题(19题) 企业面试题3 #将试题2中创建的文件名uopiyhgawe_test.html# test-->修改为omg,html-->HTML 方法一: ... 
- python在算法题中判断输入结束(EOF)
		有些算法题是这样要求的,一行输入一行数据,然后没有规定我要输入多少行,你要自行判断文件结束EOF,否则是会runtime error的,因为oj内部都是用文件来进行读写的. 例如a+b,每一行输入a ... 
- 2017蓝桥杯省赛C/C++B(补题中)
		标题:等差素数列 2,3,5,7,11,13,....是素数序列. 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列. 上边的数列公差为30,长度为6. 200 ... 
随机推荐
- CentOS7 安装boost
			(1)到这个网址www.boost.org下载相应的代码包,我下载的是目前最新的版本boost_1_59_0.tar.bz2 (2)进入目录执行解压操作:tar -jxvf boost_1_59_0. ... 
- 僵尸进程(zombie process)
			首先了解一下linux中进程的5大状态: R Running or runnable (on run queue)S Interruptible sleep (waiting for an event ... 
- 翻转单词顺序 VS 左旋转字符串
			全部内容来自<剑指offer>. 题目一: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字符一样处理.例如输入字符串“I am a stude ... 
- 关于MySQL数据库的卸载
			首先对于MySQL这款数据库来讲,不能简单的卸载就草草了事,我们首先在mysql的文件下面找到my.ini这个文件, 在其中找到mysql数据库所产生的data文件,这个文件一般在c盘的一个隐藏目录下 ... 
- MES系统的模型结构和主要功能(二)
			上一节,我们主要说了Mes系统是什么,以及它的特点和难点,本节,再来讨论一下一个合格的MES系统的模型结构和基本功能. 现代工厂的快速发展,对MES系统提出了更高的要求,其必须满足范围广泛的任务要求, ... 
- hue搭建
			1.安装依赖: sudo yum -y install gcc-c++ asciidoc cyrus-sasl-devel cyrus-sasl-gssapi krb5-devel libxml2-d ... 
- rsync客户端一键安装rsync脚本(源码)
			客户端 read -np "请输入源码rsync的URL 地址 包名(以空格为分隔符,别带/):" URL DZ BM yum remove -y rsync &>& ... 
- imos-累积和法
			在解AOJ 0531 Paint Color时,学到了一个累积和的妙用--imos法,由于原文是日语,所以特意翻译过来.值得一提的是,作者Kentaro Imajo跟鄙人同龄,却已取得如此多的成就,而 ... 
- 批量下载B站视频
			一个一个下载:https://www.zhihu.com/question/41367609 WSDAB的回答批量下载:https://www.zhihu.com/question/49793759( ... 
- .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger
			.Net Core3.0 WebApi 项目框架搭建:目录 为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技 ... 
