隐藏页面特效
Fork me on GitHub

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()函数的返回结果记为d1
    2、R=randint(le3,le5) 103 ~ 105的任意整数
    3、B=AR
    4、d1B!

  • (A2)!=(A2)(A1)(AR+1)(AR)!阶乘展开

  • 由上述第三个变型式可得(A2)!
    (A2)(A1)(AR+1)B!
    =>B!(A2)(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知识学习

__EOF__

本文作者Konmu
本文链接https://www.cnblogs.com/Konmu/p/12507303.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Konmu  阅读(778)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示