BUUCTF暗号

BUUCTFいくつかの暗号WP

【AFCTF2018]モース

  • シンプルなモールス信号、モールスコードはスペースで区切られたポイントの最も直感的な直接使用され、マーキング、分割するスラッシュを使用して、少し周りこの質問
    、それは最初にすべてのスペースを置き換えるスラッシュ、オンライン解読モールス信号、ターンに進最終的には16進数の文字列の束を得ます
    モールス

[GUET-CTF2019] BabyRSA

  • 以下の条件を与えます
    質問
  • ここでのp + q個の結果を直接オイラー関数を与え、そして、我々が知っている解決するため、M = POW(C、Dで N)、 Dは、直接与えられている問題である
    ので、その解決Nの残り、Nここであれば、オイラー関数とp + qは展開計算が得られるよう
  • (p + 1)(Q + 1)= PQ +(P + Q)+1 => N = PQ =(P-1)(Q-1) - (P + Q)-1
  • だから、次のようにエンドEXPで:
# -*- coding:utf-8 -*-
# Author : Konmu
# k=p+q
# phi=(p+1)(q+1)

from Crypto.Util.number import long_to_bytes

k=int('0x1232fecb92adead91613e7d9ae5e36fe6bb765317d6ed38ad890b4073539a6231a6620584cea5730b5af83a3e80cf30141282c97be4400e33307573af6b25e2ea',16)
phi=int('0x5248becef1d925d45705a7302700d6a0ffe5877fddf9451a9c1181c4d82365806085fd86fbaab08b6fc66a967b2566d743c626547203b34ea3fdb1bc06dd3bb765fd8b919e3bd2cb15bc175c9498f9d9a0e216c2dde64d81255fa4c05a1ee619fc1fc505285a239e7bc655ec6605d9693078b800ee80931a7a0c84f33c851740',16)
e=int('0xe6b1bee47bd63f615c7d0a43c529d219',16)
d=int('0x2dde7fbaed477f6d62838d55b0d0964868cf6efb2c282a5f13e6008ce7317a24cb57aec49ef0d738919f47cdcd9677cd52ac2293ec5938aa198f962678b5cd0da344453f521a69b2ac03647cdd8339f4e38cec452d54e60698833d67f9315c02ddaa4c79ebaa902c605d7bda32ce970541b2d9a17d62b52df813b2fb0c5ab1a5',16)
c=int('0x50ae00623211ba6089ddfae21e204ab616f6c9d294e913550af3d66e85d0c0693ed53ed55c46d8cca1d7c2ad44839030df26b70f22a8567171a759b76fe5f07b3c5a6ec89117ed0a36c0950956b9cde880c575737f779143f921d745ac3bb0e379c05d9a3cc6bf0bea8aa91e4d5e752c7eb46b2e023edbc07d24a7c460a34a9a',16)

n=phi-k-1
m=pow(c,d,n)
print(long_to_bytes(m))

【NCTF2019]キーボード

  • もっと脳内の小さな穴よりも少しこじつけ話題のパスワード感としてカウント正直この問題は、その他の多くの種類を感じる傾向があります
  • 観察は(上から見て)最初の行の全てのアルファベットキー後に発見し、それぞれが連番キーに対応する所定の第一の暗号文アルファベット
    Q-> 1、W-> 2、 E-> 3、R-> 4 ...
  • 第二に、暗号文の文字は1-4倍に繰り返しいっぱいであるため、推測では、二乗電話パスワードです見つけます
    Jiugongge
  • 次の二つのソリューションは、1が手書きされ、一つはスクリプト化されました
  • 次のように私はEXPを書きました:
# -*- coding:utf-8 -*-
# Author : Konmu
# [NCTF2019]Keyboard

chiper='ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee'
chiper=chiper.split(' ')

keys=['q','w','e','r','t','y','u','i','o']
values=[1,2,3,4,5,6,7,8,9]
dicts=dict(zip(keys,values))

jiugongge=['   ','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
new_dicts=dict(zip(values,jiugongge))

for i in range(len(chiper)):
    temp=dicts.get(chiper[i][0])
    print(''.join(new_dicts[temp][len(chiper[i])-1]),end='')

【HDCTF2019] bbbbbbrsa

  • この問題は、彼がb64encodeインポートライブラリの名前を変更するには注意を払っていないとなった始めb32encodeで、解決すべき残された問題は、電子解決する方法をピットでいる場所がある
    50000から70000とphi間でこの問題がランダムに取得することであるここを素数は、溶液は、ライン上で、この範囲内で直接ブラスト、非常に簡単です
  • 第二の点は、フラグは形式を理解していないので、人は試してみた直接参加していない場合など、問題を行い、ピットです
    ?あなたはあなたのフォーマットAを教えてくれないBUUCTFプラットフォームにしたいかもしれない場所(:ので、最終の多くの質問エンドフラグは、{}、本当に悪い決意இ௰இ)ラップされないように答えは、フォーマットを変更しました
  • EXP例:
# -*- coding:utf-8 -*-
# Author: Konmu

from base64 import b64decode
import gmpy2
from Crypto.Util.number import long_to_bytes

p=177077389675257695042507998165006460849
q=211330365658290458913359957704294614589
n=37421829509887796274897162249367329400988647145613325367337968063341372726061
c='==gMzYDNzIjMxUTNyIzNzIjMyYTM4MDM0gTMwEjNzgTM2UTN4cjNwIjN2QzM5ADMwIDNyMTO4UzM2cTM5kDN2MTOyUTO5YDM0czM3MjM'
c=int(b64decode(c[::-1]))
phi=(p-1)*(q-1)

for e in range(50000,70000):
    if(gmpy2.gcd(e,phi)==1):
        d=int(gmpy2.invert(e,phi))
        m=pow(c,d,n)
        if 'flag{' in long_to_bytes(m):
            print(long_to_bytes(m))

塩・胡椒チキン蓮の香り

  • これは、質問同音異字のパリティを求められますが、実際の感覚は、パリティいけない、正確にハミングコードパリティパケットであるべき
    監督ビットとき:0000、パーティを受信すると、パリティビットを生成し、受信しました同じパリティ、そうでない場合は別の説明の誤り、それはパリティエラー訂正ハミングの問題を解決するために問題となります
  • 式に従ってまず、次のステップに分割誤り訂正ハミング:\(2 ^ R&LT \ K + R&LT GEQ 1 +する\)(Kはデータビットの数を表し、rはパリティビットを表し、そしてR&LTは不等式の最小値を満たしている場合)
    ハミングコードは12 110010100000記載kの合計が与えられ+ rが= 12、rは、4の最小であるべきである13より大きい8にk個のデータビットそう
  • 4のパリティ、及びパリティの吐出位置を決定するビットのみ(2 ^ N \)\位置、ハミングコードの決意\(P_1、P_2、P_4、 P_8 \) これらの位置をパリティビットをされ
    たデータをk(1100 0100)した後、それから解放します
  • オーダービットダウン別の問題は、正しいデータが000000100011後に、有効なデータは、その後、00100011から解放されるべきであることを示す、と述べました
  • そこでは、残りの部分はパリティエラーを指摘し得ることであるので、あなたは、右のデータを持っている
    hanming
    注:\(P_1、P_2、P_4、P_8 \)その最初の送信者チェックコードを得るに記入するバイナリデータの: 1000年
  • 計算\(P_1、P_2、P_4、P_8 \)
    \(P_4 = D_5 \ bigoplus D_6 \ bigoplus D_7 \ bigoplus D_8 = 0 \ bigoplus 0 \ bigoplusの1 \ bigoplus。1 = 0 \)
    \(P_3 = D_2 \ bigoplus D_3 \ bigoplus D_4 \ bigoplus D_8 = 0 \ bigoplus。1 \ bigoplus 0 \ bigoplus。1 = 0 \)
    \(P_2 = D_1 \ bigoplus D_3 \ bigoplus D_4 \ bigoplus \ bigoplus D_7 = D_6 0 \ bigoplus。1 \ bigoplus 0 \ bigoplus 0 \ bigoplusの1 = 0 \)
    \(P_1 = D_1 \ bigoplus D_2 \ bigoplus D_4 \ bigoplus D_5 \ bigoplus D_7 = 0 \ bigoplus 0 \ bigoplus 0 \ bigoplus 0 \ bigoplusの1 = 1 \)。
    注:上記の計算が示す:で\(P_4 \) 例えば、左から右にすべてのバイナリ()のテストサイトテストは、最初のデータ、すなわち、である\(D_5、D_6、D_7、 D_8 \)
  • 受信者のチェックサムテスト結果から入手できます。0001
  • 受信および送信チェックサム一貫性のない、に反転されたエラー、ことを示している
    MD5のPythonカウントするようにしている、110110100000:最後のデータがあります

[HDCTF2019]基本的なRSA

  • 最も基本的なRSA
  • EXP例:
# -*- coding:utf-8 -*-
# Author: Konmu
# [HDCTF2019]basic rsa
import gmpy2
from Crypto.Util.number import *

p=262248800182277040650192055439906580479
q=262854994239322828547925595487519915551
e=65533
n=p*q
c=27565231154623519221597938803435789010285480123476977081867877272451638645710
phi=(p-1)*(q-1)

d=int(gmpy2.invert(e,phi))
m=pow(c,d,n)

print(long_to_bytes(m))

パンの波

  • 言葉のいくつかは、その単語の出現頻度の統計を考えるすべての繰り返しを見暗号文、最初に各単語が現れるの周波数を取得した後、降順に、そして最終的にに接合単語4,8,11,15,16に来ました
  • EXP:
# -*- coding:utf-8 -*-
# Author: Konmu

f=open("C:/Users/xxx/Desktop/浪里淘沙.txt",'r')
data=f.read()

statistics={}
frequency=[]
num=[4,8,11,15,16]
def zipin(lsit):
    for i in lsit:
        statistics.setdefault(data.count(i),str(i))
        frequency.append(data.count(i))
    frequency.sort()
    for i in num:
        print(''.join(statistics.get(frequency[i-1])),end='')
    print('\n')
    return(statistics)

if __name__ == '__main__':
    letters=["tonight","success","notice","example","should","crypto","backspace","learn","found","morning","we","system","sublim","the","user","enter"]
    print(zipin(letters))

おすすめ

転載: www.cnblogs.com/Konmu/p/12527029.html