无趣的浅 2022-06-25 20:07 采纳率: 50%
浏览 108
已结题

Crypto,已知密钥生成函数,e,n1,n2,c1,c2

这是个加密程序,生成密钥一个e,n1,n2,在用RSA加密,这里程序给出了e,n1,n2,c1,c2,求明文



from Crypto.Util.number import *
import gmpy2
from flag import FLAG
def keygen(nbit, dbit):
    if 2*dbit < nbit:
        while True:
            a1 = getRandomNBitInteger(dbit)
            b1 = getRandomNBitInteger(nbit//2-dbit)
            n1 = a1*b1+1
            if isPrime(n1):
                break
        while True:
            a2 = getRandomNBitInteger(dbit)
            b2 = getRandomNBitInteger(nbit//2-dbit)
            n2=a2*b2+1
            n3=a1*b2+1
            if isPrime(n2) and isPrime(n3):
                break
        while True:
            a3=getRandomNBitInteger(dbit)
            if gmpy2.gcd(a3,a1*b1*a2*b2)==1:
                v1=(n1-1)*(n2-1)
                k=(a3*inverse(a3,v1)-1)//v1
                v2=k*b1+1
                if isPrime(v2):
                    return a3,n1*n2,n3*v2
def encrypt(msg, pubkey):
    return pow(msg, pubkey[0], pubkey[1])

nbit = 1024
dbit = 256
e, n1, n2=keygen(nbit, dbit)
print('e =', e)
print('n1 =', n1)
print('n2 =', n2)
FLAG = int(FLAG.encode('utf-8').hex(), 16)
c1 = encrypt(FLAG, [e, n1])
c2 = encrypt(FLAG, [e, n2])
print('enc1 =', c1)
print('enc2 =', c2)
# e = 64991215158963691560526666468141959384959109359439137131747651162956455586271
# n1 = 29993503600164729015956324786706888442519396064191560750084140480290745819535179693348191507149250430395035552797283845777601934626280373409219187420866944308214314519319036917673538094015208260669572499228580056077786705598288026374871729383433345507107962917127650202187058774356364876840623349671218708163
# n2 = 22111930331381204542945530852361998548318442407872218298358617096708819116917760050316820810420025909178795848107273937553163317177369208499520284574181398183015911140668391445813446367863710044212006290553153052918732733827420444142923043854261762712224865735741111776384712426729456003107915641158324427237
# c1 = 4050453211733764124998757151959520129274498061402113370672102849996805069619121055320844250102225939073097833283374610550535896252339041756015394774844802617971866367399987374582995740057357925318488526068975412719737069982622859388378596681687999605916608432304653412791393164911051654044838692816332109954
# c2 = 300292243041384504213595552256374255656084967560586182569837688627893946619339238785749026493866380362257497763399726257131188052592740026134061382393383939963518409658835911548200196944948910370613829800837550235668282523323993253728049425141334823301549736503626230379795337868011538930813438450324726103



  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 7月3日
    • 创建了问题 6月25日

    悬赏问题

    • ¥20 关于web前端如何播放二次加密m3u8视频的问题
    • ¥20 spring boot集成mqtt的使用问题
    • ¥15 使用百度地图api 位置函数报错?
    • ¥15 metamask如何添加TRON自定义网络
    • ¥66 关于川崎机器人调速问题
    • ¥15 winFrom界面无法打开
    • ¥30 crossover21 ARM64版本安装软件问题
    • ¥15 mymetaobjecthandler没有进入
    • ¥15 mmo能不能做客户端怪物
    • ¥15 osm下载到arcgis出错