[ACTF新生赛2020]crypto-rsa3

题目描述

from Crypto.Util.number import *

import gmpy2

import random

e=65537

p = getPrime(512)

q = int(gmpy2.next_prime(p))

n = p*q

m = bytes_to_long(FLAG)

c = pow(m,e,n)

print(n)

print(c)

#n=177606504836499246970959030226871608885969321778211051080524634084516973331441644993898029573612290095853069264036530459253652875586267946877831055147546910227100566496658148381834683037366134553848011903251252726474047661274223137727688689535823533046778793131902143444408735610821167838717488859902242863683

#c=1457390378511382354771000540945361168984775052693073641682375071407490851289703070905749525830483035988737117653971428424612332020925926617395558868160380601912498299922825914229510166957910451841730028919883807634489834128830801407228447221775264711349928156290102782374379406719292116047581560530382210049

明显的RSA加密

因为p和q十分接近,所以可以使用yafu直接分解

yafu用于自动整数因式分解,在RSA中,当p、q的取值差异过大或过于相近的时候,使用yafu可以快速的把n值分解出p、q值,原理是使用Fermat方法与Pollard rho方法等。

from Crypto.Util.number import *
import gmpy2
e=65537
n=177606504836499246970959030226871608885969321778211051080524634084516973331441644993898029573612290095853069264036530459253652875586267946877831055147546910227100566496658148381834683037366134553848011903251252726474047661274223137727688689535823533046778793131902143444408735610821167838717488859902242863683
c=1457390378511382354771000540945361168984775052693073641682375071407490851289703070905749525830483035988737117653971428424612332020925926617395558868160380601912498299922825914229510166957910451841730028919883807634489834128830801407228447221775264711349928156290102782374379406719292116047581560530382210049
q=13326909050357447643526585836833969378078147057723054701432842192988717649385731430095055622303549577233495793715580004801634268505725255565021519817179231
p=13326909050357447643526585836833969378078147057723054701432842192988717649385731430095055622303549577233495793715580004801634268505725255565021519817179293
phi=(p-1)*(q-1)
d=inverse(e,phi)
m=pow(c,d,n)
print(m)
#m=893441512863695667867454629314548913750576288726628646106246575194731343607717680126106810553506844477056381
#m=616374667b705f616e645f715f73686f756c645f6e6f745f62655f736f5f636c6f73655f696e5f76616c75657d
#m=actf{p_and_q_should_not_be_so_close_in_value}

根据引用\[1\]中的脚本,这段代码是用于解决ACTF新生2020中的base64隐写问题的。该问题涉及到一个名为"abcc.txt"的文件,其中包含了经过base64编码的字符串。脚本通过比较经过隐写处理的字符串和原始字符串的差异,来获取隐写信息。具体的解决过程如下: 1. 首先,脚本会读取"abcc.txt"文件的内容,并将每一行的换行符去除。 2. 然后,脚本会将每一行的字符串进行base64解码,并再次进行base64编码,去除换行符,得到一个经过隐写处理的字符串。 3. 接下来,脚本会调用"get_base64_diff_value"函数,比较经过隐写处理的字符串和原始字符串的差异。该函数会返回两个字符之间在base64字符集中的差值。 4. 如果差异不为0,则将差值转换为二进制,并填充到bin_str字符串中。 5. 如果差异为0,则将"0"填充到bin_str字符串中。 6. 最后,脚本会调用"goflag"函数,将bin_str字符串转换为ASCII字符,并返回解密后的隐写信息。 请注意,这段代码是用于特定比的解决方案,如果你想要解决其他base64隐写问题,可能需要根据具体情况进行修改。 #### 引用[.reference_title] - *1* [[ACTF新生2020]base64隐写 -wp](https://blog.csdn.net/freerats/article/details/108155636)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值