Pollard‘s p-1算法

概述

光滑数 (Smooth number):指可以分解为多个小素数乘积的正整数

当p是N 的因数,并且p−1是光滑数,可以考虑使用Pollard's p-1算法来分解N

当p是N的因数,并且p+1是光滑数,可以考虑使用Williams's p+1算法来分解N

 这里只介绍pollard p-1算法

算法核心

假设存在素数p,p是合数n的因子,p-1可以被分解成多个小素数k1,k2,k3......kn<B(其中B是我们选取的一个上界)

p-1=k1*k2*k3...*kn

那么存在  p-1 | B!

由费马小定理可知:

                                                        m^(p-1) \equiv 1 mod p   

因为p-1 | B!所以

                                                        m^(B!) \equiv 1 mod p

所以

                                                        m^(B!) - 1= k*p

而我们的目的就是求出p

于是乎

                                                        p=gcd(m^(B!)-1,n)

 代码实现:这里m取最简单的值:2

#脚本1
def Pollard(B, n):a = pow(2, math.factorial(B), n)return math.gcd(a-1, n)

math.factorial(B)是求B的阶乘

a = pow(2, math.factorial(B), n) 这里模n可以减小数值,加快计算,否则脚本执行会很慢很慢

#脚本2
m = 2
i = 2
while True:a = pow(m, i, n)p = gmpy2.gcd(a-1, n)if p != 1 and p != n:q = n // pprint("p=",p)print("q=",q)breaki += 1

这里没用上界B,而是不断用m乘i,构成阶乘,从而找到上界

案例

2024_newstar_crypto

from Crypto.Util.number import *
from random import choice
from enc import flagm = bytes_to_long(flag)
def get_primes(limit):primes = []is_prime = [True] * (limit + 1)for num in range(2, limit + 1):if is_prime[num]:primes.append(num)for multiple in range(num * num, limit + 1, num):is_prime[multiple] = Falsereturn primesdef get_Prime(bits):while True:n = 2while n.bit_length() < bits:n *= choice(primes)if isPrime(n + 1):return n + 1e = 65537
primes = get_primes(e)
p = get_Prime(512)
q = get_Prime(512)
n = p*q
c = pow(m,e,n)
print(f"n = {n}")
print(f"e = {e}")
print(f"c = {c}")
'''
n = 11039465757321779749699115271175512667139900174718736810369447320076323722255434292310358024561522508796910115450323496447022239437773990981536427837406218598107069494432101729405702532145398564394815485237091250665627736733029998539907483103936019387506766847901269370907583069348340970264589547521878184740704877
e = 65537
c = 999985242089285281573358992862050772171553905758195933815934618530062196165616033686130348967500088738894025554769544651219372069639483611911419044407380282591769389311004388591587725946534597210624224229109408954620531714696257219047380587652138116530227788392134058889161962899416080258311278619324733722515967
'''

这里的光滑数是p+1,但本质都是一样的

脚本代码

from Crypto.Util.number import *
from random import choice
from sympy import factorint
import math
import gmpy2n = 11039465757321779749699115271175512667139900174718736810369447320076323722255434292310358024561522508796910115450323496447022239437773990981536427837406218598107069494432101729405702532145398564394815485237091250665627736733029998539907483103936019387506766847901269370907583069348340970264589547521878184740704877
e = 65537
c = 999985242089285281573358992862050772171553905758195933815934618530062196165616033686130348967500088738894025554769544651219372069639483611911419044407380282591769389311004388591587725946534597210624224229109408954620531714696257219047380587652138116530227788392134058889161962899416080258311278619324733722515967def Pollard(B, n):a = pow(2, math.factorial(B),n)return math.gcd(a-1, n)
p=Pollard(e,n)
q=n//p
phi=(p-1)*(q-1)
d=gmpy2.invert(e,phi)flag=pow(c,d,n)
print(long_to_bytes(flag))

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

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

相关文章

11.useComponentDidMount

在 React 的函数组件中,有时我们需要在组件首次挂载后执行某些操作,这在类组件中通常通过 componentDidMount 生命周期方法来实现。useComponentDidMount 钩子提供了一种简洁的方式来在函数组件中实现相同的功能。这个自定义钩子使得在组件挂载后执行一次性操作变得简单直观。…

一个简单的Qt Console Application计算练习程序

初步体验Qt Creator 用途&#xff1a;练习20以内2位数乘法速算的程序 功能1&#xff1a;支持用户设定题目数量 std::cout << "请输入本次练习题目数量&#xff1a;";int numProblems 0;std::string num;std::cin >> num;try {numProblems std::stoi(…

飞腾X100适配Ubuntu说明

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

Docker配置网站环境

Mysql 先安装mysql 启动并后台运行&#xff1a;run -d 容器名称&#xff1a;--name 设置端口映射&#xff1a;-p 主机端口&#xff1a;容器端口 环境变量&#xff1a;-e 最后指定镜像名称 sudo docker run -d \--name mysql\-p 3306:3306\-e MYSQL_ROOT_PASSWORD123456\…

单细胞空间转录组RCTD去卷积分析学习和整理

RCTD(Robust Cell Type Decomposition)&#xff0c;是一种用于将单细胞RNA测序数据中的细胞类型注释转移到空间转录组学数据上的方法。RCTD 通过整合单细胞和空间转录组学数据&#xff0c;能够较为精确地为空间点&#xff08;spots&#xff09;分配细胞类型或细胞类型的混合&am…

LabVIEW风机滚动轴承监测系统

矿井主通风机作为矿井中最重要的通风设备&#xff0c;一旦出现故障&#xff0c;不仅会影响矿井内的空气质量&#xff0c;还可能引发安全事故。研究表明&#xff0c;通风机中约30%的故障是由轴承问题引起的。因此&#xff0c;能够实时监控矿井主通风机轴承状态的系统&#xff0c…

使用枚举来实现策略模式

使用很多if else的场景 public void save(String type,Object data){if("db".equals(type)){saveInDb(data);}else if("file".equals(type)){saveInFile(data);}else if("oss".equals(type)){saveInOss(data);}}使用枚举来解决 public enum Save…

CSS网页布局(重塑网页布局)

一、实现两列布局 许多网站有一些特点&#xff0c;如页面顶部放置一个大的导航或广告条&#xff0c;右侧是链接或图片&#xff0c;左侧放置主要内容&#xff0c;页面底部放置版权信息等 一般情况&#xff0c;此类网页布局的两列都有固定的宽度&#xff0c;而且从内容上很容易区…

学习java第九天 简单小项目

今天简单写了小项目 import java.math.*; import java.util.*; public class Project_array{// data 拿到外面 封装的方法 共享同一个变量// static 静态上下文只能直接访问静态的变量// 一旦加上static 代表当前的变量全局共享一份static Record[] data {new Record("…

C/C++面试八股

引用&#xff1a; C面经(简洁版)-CSDN博客 正文&#xff1a; 1. const 和 volatile 的区别&#xff1f; 2. const 和 volatile 可以共用么&#xff1f;

零基础Java第八期:一维数组(1)

目录 一、 一维数组的基本概念 1.1. 什么是数组 1.2. 数组的创建及初始化 1.3. 数组的使用 二、数组是引用类型 2.1. 初始JVM的内存分布 2.2. 基本类型变量与引用类型变量 2.3. 引用变量的理解 2.4. null 三、数组的应用场景 3.1. 作为函数的参数 3.2. 作为函数的返…

你可能需要的多文档页面交互方案

前言 欢迎关注同名公众号《熊的猫》&#xff0c;文章会同步更新&#xff01; 在日常工作中&#xff0c;面对不同的需求场景&#xff0c;你可能会遇到需要进行多文档页面间交互的实现&#xff0c;例如在 A 页面跳转到 B 页面进行某些操作后&#xff0c;A 页面需要针对该操作做出…

YoloV10改进策略:主干网络改进|DeBiFormer,可变形双级路由注意力|全网首发

摘要 在目标检测领域,YoloV10以其高效和准确的性能而闻名。然而,为了进一步提升其检测能力,我们引入了DeBiFormer作为YoloV10的主干网络。这个主干网络的计算量比较大,不过,上篇双级路由注意力的论文受到很大的关注,所以我也将这篇论文中的主干网络用来改进YoloV10,卡多…

成本决定未来——AIGC 下半场,高成本阻碍发展,我们该怎么办?

你好&#xff0c;我是三桥君 你最近有没有觉得工作中用到的那些 AI 工具好像越来越便宜了呢&#xff1f;这可不是偶然哦。 今天&#xff0c;三桥君就来聊聊为啥 AIGC 的下半场成本这么重要&#xff1f; 你想想看&#xff0c;咱平时工作已经够累了&#xff0c;要是再加上用那些贵…

商​汤​二​面

1. 请尽可能详细地说明&#xff0c;根据React Router的思想&#xff0c;如何使用History API实现History Router的PWA&#xff1f;请详细说明如何监听url的改变。 React Router 是一个用于在 React 应用中实现导航和路由的库。它允许你根据 URL 的变化来渲染不同的组件。结合 …

python编译问题 当你编译第一个python程序时可能出现如下错误

python编译问题 当你编译第一个python程序时可能出现如下错误 若出现如下错误&#xff1a; E:\p\venv\Scripts\python.exe E:/p/venv/d.py File “E:/p/venv/d.py”, line 5SyntaxError: Non-ASCII character ‘\xe7’ in file E:/p/venv/d.py on line 5, but no encoding d…

代码随想录算法训练营第十一天|383. 赎金信, 15. 三数之和

文档讲解&#xff1a;代码随想录 难度&#xff1a;easy 383. 赎金信 力扣题目链接(opens new window) 给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串&#xff0c;判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成&#xf…

算法Day-2

27. 移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以下操作&am…

Adobe Illustrator如何在图片快速插入latex公式

Adobe Illustrator没法直接输入latex公式&#xff0c;也没有公式的字体 解决&#xff1a; 1.装插件&#xff1a;latex2ai&#xff08;我装不上&#xff09; 2.latex公式编辑网站&#xff08;图片识别公式多了要收费&#xff09;或者其他latex公式网站&#xff0c;公式打完保…

zotero下载、安装、翻译和显示无法安装插件“%S”的解决办法

文章目录 zotero下载和安装和翻译还有插件英文翻译软件遇到的问题 zotero下载和安装和翻译还有插件 Zotero从入门到精通第一期–如何省心省力翻译科研文献&#xff0c;这里面主要是使用小牛翻译的过程&#xff0c;输入产品密匙需要加入个人的账号密码进行sign in 英文翻译软件…