反素数(emirp数)

news/2025/3/12 23:45:16/文章来源:https://www.cnblogs.com/SevensNight/p/18766219

反素数,英文称作emirp(prime(素数)的左右颠倒拼写),是素数的一种,把一个素数的阿拉伯字数字序列(十进制)变成由低位向高位反写出来,得到的另一个数还是素数,例如素数<font style="color:rgb(32, 33, 34);">13</font>,反写就是<font style="color:rgb(32, 33, 34);">31</font>,它是另一个素数,所以<font style="color:rgb(32, 33, 34);">13</font>是一个反素数;(这个定义排除了相关的回文素数,因为回文素数反写不是另一个数而是它本身)

最小的几个反素数为:13, 17, 31, 37, 71, 73, 79, 97, 107, 113, 149, 157, 167, 179, 199, ...

所有非纯位数可交换素数都是反素数

反素数-WiKi

题目:

from Crypto.Util.number import getPrime, isPrime, bytes_to_long
from secret import flagdef emirp(x):y = 0while x !=0:y = y*2 + x%2x = x//2return ywhile True:p = getPrime(512)q = emirp(p)if isPrime(q):breakn = p*q
e = 65537
m = bytes_to_long(flag)
c = pow(m,e,n)
print(f"{n = }")
print(f"{c = }")
'''
n = 141326884939079067429645084585831428717383389026212274986490638181168709713585245213459139281395768330637635670530286514361666351728405851224861268366256203851725349214834643460959210675733248662738509224865058748116797242931605149244469367508052164539306170883496415576116236739853057847265650027628600443901
c = 47886145637416465474967586561554275347396273686722042112754589742652411190694422563845157055397690806283389102421131949492150512820301748529122456307491407924640312270962219946993529007414812671985960186335307490596107298906467618684990500775058344576523751336171093010950665199612378376864378029545530793597
'''

解题思路:

  • 已知q=reverse_x(p),x为进制数
  • 爆破思路类似RSA parity oracle(RSA奇偶校验预言机)p,qbit翻转关系,已知p最低的k位,则已知q最高的k
  • 假设已知k位的p,q,记为ph,qh,利用不等式

  • 逐位向低地址爆破,不断收缩不等式的范围,最终可求得n

解答:

from Crypto.Util.number import *
from gmpy2 import *
n = 141326884939079067429645084585831428717383389026212274986490638181168709713585245213459139281395768330637635670530286514361666351728405851224861268366256203851725349214834643460959210675733248662738509224865058748116797242931605149244469367508052164539306170883496415576116236739853057847265650027628600443901
c = 47886145637416465474967586561554275347396273686722042112754589742652411190694422563845157055397690806283389102421131949492150512820301748529122456307491407924640312270962219946993529007414812671985960186335307490596107298906467618684990500775058344576523751336171093010950665199612378376864378029545530793597
e=65537x=2	# q相对p是几进制下的反转
'''
from gmpy2 import isqrt
n = 141326884939079067429645084585831428717383389026212274986490638181168709713585245213459139281395768330637635670530286514361666351728405851224861268366256203851725349214834643460959210675733248662738509224865058748116797242931605149244469367508052164539306170883496415576116236739853057847265650027628600443901
sqrt_number = isqrt(n)
bit_length = sqrt_number.bit_length()
print("Square root in binary has", bit_length, "bits.")
'''
#Square root in binary has 512 bits.
leak_bits = 512 # sqrt(n)的二进制位数
def t(p,q,k):if k==leak_bits//2:if p*q==n:print(p,q)#12119998731259483292178496920109290754181396164390285597126378297678818779092115139911720576157973310671490865211601201831597946479039132512609504866583931#11660635291534613230423193509391946961264539191735481147071890944740311229658362673314192872117237108949853531941630122241060679012089130178372253390640871print(long_to_bytes(pow(c,invert(e,(p-1)*(q-1)),n)))exit()returnfor i in range(x):for j in range(x):p1=p+i*(x**k)+j*(x**(leak_bits-1-k))q1=q+j*(x**k)+i*(x**(leak_bits-1-k))if p1*q1>n:continueif (p1+(x**(leak_bits-1-k)))*(q1+(x**(leak_bits-1-k)))<n:continueif ((p1*q1)%(x**(k+1)))!=(n%(x**(k+1))):continuet(p1,q1,k+1)for i in range(x):t(i*(x**(leak_bits//2)),i*(x**(leak_bits//2)),0)
#moectf{WA!y0u@er***g00((d))}

题目:

while True:p = random_prime(2**512)q = ZZ(int(hex(p)[::-1], 16))if q.is_prime():break# hex(p*q)
# '7ef80c5df74e6fecf7031e1f00fbbb74c16dfebe9f6ecd29091d51cac41e30465777f5e3f1f291ea82256a72276db682b539e463a6d9111cf6e2f61e50a9280ca506a0803d2a911914a385ac6079b7c6ec58d6c19248c894e67faddf96a8b88b365f16e7cc4bc6e2b4389fa7555706ab4119199ec20e9928f75393c5dc386c65'
# hex(ciphertext)
# '3ea5b2827eaabaec8e6e1d62c6bb3338f537e36d5fd94e5258577e3a729e071aa745195c9c3e88cb8b46d29614cb83414ac7bf59574e55c280276ba1645fdcabb7839cdac4d352c5d2637d3a46b5ee3c0dec7d0402404aa13525719292f65a451452328ccbd8a0b3412ab738191c1f3118206b36692b980abe092486edc38488'

解题思路:

  • 与上面那个题只隔个进制位数
  • 改下脚本就行

解答:

from Crypto.Util.number import *
from gmpy2 import *
n = 0x7ef80c5df74e6fecf7031e1f00fbbb74c16dfebe9f6ecd29091d51cac41e30465777f5e3f1f291ea82256a72276db682b539e463a6d9111cf6e2f61e50a9280ca506a0803d2a911914a385ac6079b7c6ec58d6c19248c894e67faddf96a8b88b365f16e7cc4bc6e2b4389fa7555706ab4119199ec20e9928f75393c5dc386c65
c = 0x3ea5b2827eaabaec8e6e1d62c6bb3338f537e36d5fd94e5258577e3a729e071aa745195c9c3e88cb8b46d29614cb83414ac7bf59574e55c280276ba1645fdcabb7839cdac4d352c5d2637d3a46b5ee3c0dec7d0402404aa13525719292f65a451452328ccbd8a0b3412ab738191c1f3118206b36692b980abe092486edc38488
e = 65537x=16 # q相对p是几进制下的反转
'''
from gmpy2 import isqrt
hex_number = "0x7ef80c5df74e6fecf7031e1f00fbbb74c16dfebe9f6ecd29091d51cac41e30465777f5e3f1f291ea82256a72276db682b539e463a6d9111cf6e2f61e50a9280ca506a0803d2a911914a385ac6079b7c6ec58d6c19248c894e67faddf96a8b88b365f16e7cc4bc6e2b4389fa7555706ab4119199ec20e9928f75393c5dc386c65"
number = int(hex_number, 16)
sqrt_number = isqrt(number)
hex_sqrt = hex(sqrt_number)
hex_length = len(hex_sqrt) - 2
print("Number of hexadecimal digits:", hex_length)
'''
#Number of hexadecimal digits: 128
leak_bits = 128 # sqrt(n)的十六进制位数
def t(p,q,k):if k==leak_bits//2:if p*q==n:print(p,q)#10940426841622676366921134263606230797852377049845508023073731851498778062165943872403574214831422325352658084111135335937429027508321743816310547640134073#8149647373983803351750886568540598477647671089400013740300059155182763355863916783703939054112148224308893530604866892896459967322672335047042674959531533print(long_to_bytes(pow(c,invert(e,(p-1)*(q-1)),n)))exit()returnfor i in range(x):for j in range(x):p1=p+i*(x**k)+j*(x**(leak_bits-1-k))q1=q+j*(x**k)+i*(x**(leak_bits-1-k))if p1*q1>n:continueif (p1+(x**(leak_bits-1-k)))*(q1+(x**(leak_bits-1-k)))<n:continueif ((p1*q1)%(x**(k+1)))!=(n%(x**(k+1))):continuet(p1,q1,k+1)for i in range(x):t(i*(x**(leak_bits//2)),i*(x**(leak_bits//2)),0)
#midnight{d1vid3_and_c0nqu3r}x/\xda\xc9\xc4y\xb4\xc5!\x14\xc4p\xfal<a\x00\xd9m\xae\xb0k\xf8\xe0\xb31\xd9\xe6J\xcd\xaf|\x0b\xde6\xe2\xe8|>\xb8\xa2\x03\xa6\x92\xf6\xf3i\x10\xbb\x04\xc4Ha\x83d\x9d}6S\x88K\xba\tp\xed\xa3\xe2\xaf3\xc9\xae\xa9\xafF\xe5\x0c?\xae\x99\xae\x12\xb1\x9fO\xd2\xbc\x86\xedi\xab\xfc\xe7I\x82\xba\xfee\xba\xf0\xed

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

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

相关文章

ai烟雾检测智能摄像机

ai烟雾烟头识别摄像头作为现代火灾预防技术的重要组成部分,特别是在大范围要求高的林业、农田等,具有独特的优势,有效降低了火灾发生。AI烟雾烟头识别摄像头厂家也逐渐多了起来。AI烟雾烟火识别摄像头能准确捕捉到火焰的形状、大小、颜色等特征,还能结合环境背景、光线变化…

24-关于华夏ERP的搭建、审计、扫描

1、使用IDEA和PHPStudy搭建华夏erp 需要先下载 jshERP3.3-最新包,JSH_ERP-v3.3源码前端部署在网站根目录下创建一个名为ERP的文件夹,将前端压缩包 前端包/dist.zip 解压到该目录下 使用小皮创建 huaxi.com网站,连接到刚刚的ERP目录访问http://huaxi.com,出现如下页面说明前…

AMM算法进阶

题目: from Crypto.Util.number import * import os from gmpy2 import *def getMyPrime1(nbits):while True:n = 2*1009*7*getPrime(nbits//2)*getPrime(nbits//2)if is_prime(n+1):return n+1def getMyPrime2(nbits):while True:n = 2*1009*getPrime(nbits//2)*getPrime(nbit…

AMM算法

题目: from Crypto.Util.number import * import os from gmpy2 import *def getMyPrime(nbits):while True:n = 2*1009*getPrime(nbits//2)*getPrime(nbits//2)if is_prime(n+1):return n+1p = getMyPrime(700) q = getMyPrime(700) n = p*qe = 1009flag = bNSSCTF{******} + …

[PaperReading] Scaling Vision Transformers to 22 Billion Parameters

目录名称TL;DRMethodCode && ImplementationExperiment实现细节Linear Eval on ImageNetZero-shot Eval on ImageNetDense PredictionRelated works中值得深挖的工作 名称 Scaling Vision Transformers to 22 Billion Parameters 论文链接 时间:2023.02 作者与单位:G…

【CF VP记录】Codeforces Round 1008 (Div. 2)

比赛链接 本文原文发布于博客园,如您在其他平台刷到此文,请前往博客园获得更好的阅读体验。 跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18766146 开题 + 补题情况 坠机场,要是赛时打了的话就又回青了,前两题很快开出来了,第三题脑残了,一开始觉得只需要构…

32位系统上的Linux的highmem

什么是highmem? Linux内存管理 highmem的出现与Linux的内存管理相关。众所周知,linux内核一般将处理器的虚拟地址空间分为两个部分。底部较大的部分用于用户进程,而顶部的较小部分用于内核。这个划分的比例通常是1:3(在编译内核时可以通过特殊的配置选项修改这个比例)。所…

halcon 深度学习教程(一)分类检测 (工业里如何使用halcon深度学习去检测分类产品)

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/18766108深度学习教程目录如下,还在继续更新完善中 深度学习系列教程目录 本篇主要是入门halcon的深度学习篇,参考halcon实例classify_fruit_deep_learning.hdev,不过去实例的话会比较复杂一些,不便于理解,这…

3-11

今天学习android atudio 设置了Onclick事件监听 实现了页面跳转

浅谈动态 dp

DDP,即动态动态规划,一般是指在原有的 DP 模型上不断对初始值进行修改并得出答案。 一般而言都是进行单点修改,并且搭配数据结构以及矩阵进行实现。 这里要先给出一个前置知识: 广义矩阵乘法 原矩阵乘法式子为 \(C_{i,j}=\sum_kA_{i,k}\times B_{k,j}\)。 其实写成这样同样…

四款报表软件全解析:从山海鲸报表到Sisense的企业数据利器

概述 在大数据时代,企业对数据分析和决策支持的要求日益增强,报表软件已成为现代管理中不可或缺的重要工具。它们能够高效地整合、分析和展示数据,帮助企业从海量数据中快速提取有价值的信息,支持精准决策。本文将为大家介绍4款报表软件,这些软件各具特色,适用于不同规模…