Skip to content

Commit 417ea85

Browse files
author
Nicholas Ferreira
committed
Added crypto write-ups
1 parent 43fb64e commit 417ea85

38 files changed

+433
-0
lines changed

crypto/basic-mod-1/README.md

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
## Description
2+
```
3+
Description
4+
We found this weird message being passed around on the servers, we think we have a working decrpytion scheme.
5+
Download the message here.
6+
Take each number mod 37 and map it to the following character set: 0-25 is the alphabet (uppercase), 26-35 are the decimal digits, and 36 is an underscore.
7+
Wrap your decrypted message in the picoCTF flag format (i.e. picoCTF{decrypted_message})
8+
```
9+
10+
----
11+
12+
```txt
13+
message.txt:
14+
54 396 131 198 225 258 87 258 128 211 57 235 114 258 144 220 39 175 330 338 297 288
15+
```
16+
17+
```php
18+
#!/usr/bin/php
19+
<?php
20+
21+
$message = file_get_contents("message.txt");
22+
$msg_arr = explode(" ", $message);
23+
24+
$charset = array_merge(range("A", "Z"), range(0, 9), ["_"]);
25+
26+
echo "picoCTF{";
27+
foreach($msg_arr as $byte)
28+
echo $charset[$byte % 37];
29+
echo "}";
30+
```
31+
32+
```
33+
$ php decrypt.php
34+
picoCTF{R0UND_N_R0UND_79C18FB3}
35+
```

crypto/basic-mod-1/decrypt.php

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/usr/bin/php
2+
<?php
3+
4+
$message = file_get_contents("message.txt");
5+
$msg_arr = explode(" ", $message);
6+
7+
$charset = array_merge(range("A", "Z"), range(0, 9), ["_"]);
8+
//print_r($charset);
9+
10+
echo "picoCTF{";
11+
foreach($msg_arr as $byte)
12+
echo $charset[$byte % 37];
13+
echo "}";

crypto/basic-mod-1/message.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
54 396 131 198 225 258 87 258 128 211 57 235 114 258 144 220 39 175 330 338 297 288

crypto/basic-mod-2/README.md

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Description
2+
3+
```
4+
Description
5+
A new modular challenge!
6+
Download the message here.
7+
Take each number mod 41 and find the modular inverse for the result. Then map to the following character set: 1-26 are the alphabet, 27-36 are the decimal digits, and 37 is an underscore.
8+
Wrap your decrypted message in the picoCTF flag format (i.e. picoCTF{decrypted_message})
9+
```
10+
11+
12+
```txt
13+
message.txt:
14+
268 413 110 190 426 419 108 229 310 379 323 373 385 236 92 96 169 321 284 185 154 137 186
15+
```
16+
17+
```php
18+
#!/usr/bin/php
19+
<?php
20+
21+
$message = file_get_contents("message.txt");
22+
$msg_arr = explode(" ", $message);
23+
$charset = array_merge(range("A", "Z"), range(0, 9), ["_"]);
24+
25+
echo "picoCTF{";
26+
foreach($msg_arr as $byte)
27+
echo $charset[inverse($byte, 41)-1];
28+
echo "}";
29+
30+
function inverse($num, $mod){
31+
for($i=0;$i<$mod;$i++){
32+
$result = ($num*$i) % $mod;
33+
if($result == 1)
34+
return $i;
35+
}
36+
}
37+
38+
```
39+
40+
`picoCTF{1NV3R53LY_H4RD_C680BDC1}`

crypto/basic-mod-2/decrypt.php

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/php
2+
<?php
3+
4+
$message = file_get_contents("message.txt");
5+
$msg_arr = explode(" ", $message);
6+
$charset = array_merge(range("A", "Z"), range(0, 9), ["_"]);
7+
8+
echo "picoCTF{";
9+
foreach($msg_arr as $byte)
10+
echo $charset[inverse($byte, 41)-1];
11+
echo "}";
12+
13+
function inverse($num, $mod){
14+
for($i=0;$i<$mod;$i++){
15+
$result = ($num*$i) % $mod;
16+
if($result == 1)
17+
return $i;
18+
}
19+
}
20+
21+
//echo inverse(3, 7);

crypto/basic-mod-2/message.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
268 413 110 190 426 419 108 229 310 379 323 373 385 236 92 96 169 321 284 185 154 137 186

crypto/credstuff/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
![](/Screenshots/Pasted%20image%2020220315150539.png)

crypto/credstuff/leak.tar

30 KB
Binary file not shown.

crypto/diffie-hellman/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
![](/Screenshots/Pasted%20image%2020220316023119.png)

crypto/diffie-hellman/message.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
H98A9W_H6UM8W_6A_9_D6C_5ZCI9C8I_D9FF6IFD

crypto/morse-code/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
![](/Screenshots/Pasted%20image%2020220315151849.png)

crypto/morse-code/morse_chal.wav

2.43 MB
Binary file not shown.

crypto/rail-fence/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
![](/Screenshots/Pasted%20image%2020220315154235.png)

crypto/rail-fence/message.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Ta _7N6D49hlg:W3D_H3C31N__A97ef sHR053F38N43D7B i33___N6

crypto/substitution-0/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
![](/Screenshots/Pasted%20image%2020220315153053.png)

crypto/substitution-0/message.txt

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
EKSZJTCMXOQUDYLFABGPHNRVIW
2+
3+
Mjbjhfly Ujcbeyz eblgj, rxpm e cbenj eyz gpepjui exb, eyz kblhcmp dj pmj kjjpuj
4+
tbld e cuegg segj xy rmxsm xp reg jysulgjz. Xp reg e kjehpxthu gsebekejhg, eyz, ep
5+
pmep pxdj, hyqylry pl yephbeuxgpg—lt slhbgj e cbjep fbxwj xy e gsxjypxtxs flxyp
6+
lt nxjr. Pmjbj rjbj prl blhyz kuesq gflpg yjeb lyj jvpbjdxpi lt pmj kesq, eyz e
7+
ulyc lyj yjeb pmj lpmjb. Pmj gseujg rjbj jvsjjzxycui mebz eyz culggi, rxpm euu pmj
8+
effjebeysj lt khbyxgmjz cluz. Pmj rjxcmp lt pmj xygjsp reg njbi bjdebqekuj, eyz,
9+
peqxyc euu pmxycg xypl slygxzjbepxly, X slhuz mebzui kuedj Ohfxpjb tlb mxg lfxyxly
10+
bjgfjspxyc xp.
11+
12+
Pmj tuec xg: fxslSPT{5HK5717H710Y_3N0UH710Y_59533E2J}

crypto/substitution-1/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
![](/Screenshots/Pasted%20image%2020220315164815.png)

crypto/substitution-1/message.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
IECj (jqfue cfu ixzelus eqs coxa) xus x emzs fc ifrzlesu jsiludem ifrzsededfy. Ifyesjexyej xus zusjsyesk hdeq x jse fc iqxoosyasj hqdiq esje eqsdu iusxedgdem, esiqydixo (xyk affaodya) jpdooj, xyk zuftosr-jfogdya xtdodem. Iqxoosyasj ljlxoom ifgsu x ylrtsu fc ixesafudsj, xyk hqsy jfogsk, sxiq mdsokj x jeudya (ixoosk x coxa) hqdiq dj jltrdeesk ef xy fyodys jifudya jsugdis. IECj xus x ausxe hxm ef osxuy x hdks xuuxm fc ifrzlesu jsiludem jpdooj dy x jxcs, osaxo sygdufyrsye, xyk xus qfjesk xyk zoxmsk tm rxym jsiludem auflzj xuflyk eqs hfuok cfu cly xyk zuxiedis. Cfu eqdj zuftosr, eqs coxa dj: zdifIEC{CU3NL3YIM_4774IP5_4U3_I001_4871S6CT}

crypto/substitution-2/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
![](/Screenshots/Pasted%20image%2020220315171130.png)

crypto/substitution-2/message.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
gvjwjjoeugujajwqxzgvjwkjxxjugqfxeuvjivecvumvzzxmzbpsgjwujmswegrmzbpjgegezhuehmxsiehcmrfjwpqgwezgqhisumrfjwmvqxxjhcjgvjujmzbpjgegezhunzmsupwebqwexrzhurugjbuqibeheugwqgezhnshiqbjhgqxukvemvqwjajwrsujnsxqhibqwdjgqfxjudexxuvzkjajwkjfjxejajgvjpwzpjwpswpzujznqvecvumvzzxmzbpsgjwujmswegrmzbpjgegezheuhzgzhxrgzgjqmvaqxsqfxjudexxufsgqxuzgzcjgugsijhguehgjwjugjiehqhijomegjiqfzsgmzbpsgjwumejhmjijnjhueajmzbpjgegezhuqwjzngjhxqfzwezsuqnnqewuqhimzbjizkhgzwshhehcmvjmdxeuguqhijojmsgehcmzhnecumwepguznnjhujzhgvjzgvjwvqhieuvjqaexrnzmsujizhjopxzwqgezhqhiebpwzaeuqgezhqhizngjhvqujxjbjhguznpxqrkjfjxejajqmzbpjgegezhgzsmvehczhgvjznnjhueajjxjbjhguznmzbpsgjwujmswegreugvjwjnzwjqfjggjwajvemxjnzwgjmvjaqhcjxeubgzugsijhguehqbjwemqhvecvumvzzxunswgvjwkjfjxejajgvqgqhshijwugqhiehcznznnjhueajgjmvhelsjueujuujhgeqxnzwbzshgehcqhjnnjmgeajijnjhujqhigvqggvjgzzxuqhimzhnecswqgezhnzmsujhmzshgjwjiehijnjhueajmzbpjgegezhuizjuhzgxjqiugsijhgugzdhzkgvjewjhjbrqujnnjmgeajxrqugjqmvehcgvjbgzqmgeajxrgvehdxedjqhqggqmdjwpemzmgneuqhznnjhueajxrzwejhgjivecvumvzzxmzbpsgjwujmswegrmzbpjgegezhgvqgujjdugzcjhjwqgjehgjwjugehmzbpsgjwumejhmjqbzhcvecvumvzzxjwugjqmvehcgvjbjhzscvqfzsgmzbpsgjwujmswegrgzpelsjgvjewmswezuegrbzgeaqgehcgvjbgzjopxzwjzhgvjewzkhqhijhqfxehcgvjbgzfjggjwijnjhigvjewbqmvehjugvjnxqceupemzMGN{H6W4B_4H41R515_15_73I10S5_8J1FN808}

crypto/sum-o-primes/README.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Calculando soma e produto dos primos:
2+
3+
![](/Screenshots/Pasted%20image%2020220317022118.png)
4+
5+
![](/Screenshots/Pasted%20image%2020220317022028.png)

crypto/sum-o-primes/decrypt.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/usr/bin/env python
2+
# -*- coding:utf-8 -*-
3+
import binascii
4+
import gmpy2
5+
n=0x85393637a04ec36e699796ac16979c51ecea41cfd8353c2a241193d1d40d02701b34e9cd4deaf2b13b6717757f178ff75249f3d675448ec928aef41c39e4be1c8ba2ba79c4ada36c607763d7dc8543103acfe1027245acda2208f22fcabe0f37bdadf077e4f943c4f4178cedeb5279a4ebc86323356e23a58b6666ac6ffbf4f1c8229117ffb9071a94dfb724957f10d6664e4ee02e16bed29eb922f126e2082e2f73b5c5b7817e0543155eb9673f4de3de8c91707c1261e8ba6e7348d930293f7796679218c2b1dabe41527eccd72ec3e7284344622eff81ae0541769fb70b6146b54bd092c2dfbe7f8e9653cad80d0fb4f3ef288778927b3852f9ff3a4076d7
6+
# This way I use yafu It's broken down n
7+
p=98003312109211742492766078547103180302458874375031751582594385856300852883502527670257348847568307704278396061082779143716586619015707011390688920499602751203272333055894471977207396801711910074168795055647226748304769472877973696655496697151190763159772949611427327156924881240093411584911289986786645251817
8+
q=171605493547460749047153620147807189143153830318479320490789125997400418790068931220714964538131106519997625293387042516388121505143700224886953561940149152974090643943558758253528750845622251033033328825087914744922213112925910051618913976942968425738697927234626842286228129966348756892033903656065084360639
9+
e=65537
10+
c=0x42cafbc77ed8396a681dac328701ee02cd746488ae084f15a3e6a5b8f666c595a372a69bbca0dae934fd5ed2292d4393912ee10a22a3b57de9cee2f30b5dc7c67f574b0453f6074171cca37bd407529cb30ba17f152ef5b2484d94b38cf0a513a723255d725e5c3b3f3c985f9223095be3fa148afedf91e4ed37720c3d97dd29cf07830efa8a557a9da68d3095fc3b31f3763e030b62c70d94c3d2951e163e48683f3b9611d562ea06bf1e5d8465e8bf5a6345050a5e7b0c175faf136562cf2a196fdb61ac6503446616cffa9ed85015b86dda73f6eda4d688d3e719a07439d98f95fb5dcf675948ec58d9af83fa29afa4375213ec48f09a6c8cbc431cfe7c6a
11+
12+
13+
phi=(p-1)*(q-1)
14+
d=gmpy2.invert(e,phi)
15+
m=pow(c,d,n)
16+
print(hex(m))
17+
print(binascii.unhexlify(hex(m)[2:].strip("L")))

crypto/sum-o-primes/gen.py

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/usr/bin/python
2+
3+
from binascii import hexlify
4+
from gmpy2 import mpz_urandomb, next_prime, random_state
5+
import math
6+
import os
7+
import sys
8+
9+
if sys.version_info < (3, 9):
10+
import gmpy2
11+
math.gcd = gmpy2.gcd
12+
math.lcm = gmpy2.lcm
13+
14+
FLAG = open('flag.txt').read().strip()
15+
FLAG = int(hexlify(FLAG.encode()), 16)
16+
SEED = int(hexlify(os.urandom(32)).decode(), 16)
17+
STATE = random_state(SEED)
18+
19+
def get_prime(bits):
20+
return next_prime(mpz_urandomb(STATE, bits) | (1 << (bits - 1)))
21+
22+
p = get_prime(1024)
23+
q = get_prime(1024)
24+
25+
x = p + q
26+
n = p * q
27+
28+
e = 65537
29+
30+
m = math.lcm(p - 1, q - 1)
31+
d = pow(e, -1, m)
32+
33+
c = pow(FLAG, e, n)
34+
35+
print(f'x = {x:x}')
36+
print(f'n = {n:x}')
37+
print(f'c = {c:x}')

crypto/sum-o-primes/output.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
x = 17fef88f46a58da13be8083b814caf6cd8d494dd6c21ad7bf399e521e14466d51a74f51ad5499731018b6a437576e72bd397c4bb07bfbb699c1a35f1f4fa1b86dee2a1702670e9cea45aa7062f9569279d6d4b964f3df2ff8e38cf029faad57e42b831bde21132303e127cba4e80cd3c9ff6a7bad5b399a18252dc35460471ea8
2+
n = 85393637a04ec36e699796ac16979c51ecea41cfd8353c2a241193d1d40d02701b34e9cd4deaf2b13b6717757f178ff75249f3d675448ec928aef41c39e4be1c8ba2ba79c4ada36c607763d7dc8543103acfe1027245acda2208f22fcabe0f37bdadf077e4f943c4f4178cedeb5279a4ebc86323356e23a58b6666ac6ffbf4f1c8229117ffb9071a94dfb724957f10d6664e4ee02e16bed29eb922f126e2082e2f73b5c5b7817e0543155eb9673f4de3de8c91707c1261e8ba6e7348d930293f7796679218c2b1dabe41527eccd72ec3e7284344622eff81ae0541769fb70b6146b54bd092c2dfbe7f8e9653cad80d0fb4f3ef288778927b3852f9ff3a4076d7
3+
c = 42cafbc77ed8396a681dac328701ee02cd746488ae084f15a3e6a5b8f666c595a372a69bbca0dae934fd5ed2292d4393912ee10a22a3b57de9cee2f30b5dc7c67f574b0453f6074171cca37bd407529cb30ba17f152ef5b2484d94b38cf0a513a723255d725e5c3b3f3c985f9223095be3fa148afedf91e4ed37720c3d97dd29cf07830efa8a557a9da68d3095fc3b31f3763e030b62c70d94c3d2951e163e48683f3b9611d562ea06bf1e5d8465e8bf5a6345050a5e7b0c175faf136562cf2a196fdb61ac6503446616cffa9ed85015b86dda73f6eda4d688d3e719a07439d98f95fb5dcf675948ec58d9af83fa29afa4375213ec48f09a6c8cbc431cfe7c6a
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
![](/Screenshots/Pasted%20image%2020220315174221.png)
+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
$msg = file_get_contents("message.txt");
3+
$splitted = str_split($msg, 3);
4+
foreach($splitted as $chunk)
5+
echo preg_replace("/(.)(.)(.)/","$3$1$2",$chunk);
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
heTfl g as iicpCTo{7F4NRP051N5_16_35P3X51N3_V6E5926A}4

crypto/very-smooth/PollardRsaCracker

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Subproject commit 4dc420bb1ed9f36341af4e6145e004b94a33fa71

crypto/very-smooth/README.md

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[https://github.com/ZeroBone/PollardRsaCracker](https://github.com/ZeroBone/PollardRsaCracker)
2+
3+
![](/Screenshots/Pasted%20image%2020220317222619.png)

crypto/very-smooth/decrypt.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/usr/bin/env python
2+
# -*- coding:utf-8 -*-
3+
import binascii
4+
import gmpy2
5+
n=0x65446ab139efe9744c78a271ad04d94ce541a299f9d4dcb658f66f49414fb913d8ac6c90dacc1ad43135454c3c5ac76c56d71d2816dac23db5c8caa773ae2397bd5909a1f2823c230f44ac684c437f16e4ca75d50b75d2f7e5549c034aa8a723c9eaa904572a8c5c6c1ed7093a0695522a5c41575c4dbf1158ca940c02b223f50ae86e6782819278d989200a2cd2be4b7b303dffd07209752ee5a3060c6d910a108444c7a769d003bf8976617b4459fdc15a2a73fc661564267f55be6a0d0d2ec4c06a4951df5a096b079d9e300f7ad72fa6c73a630f9a38e472563434c10225bde7d08c651bdd23fd471077d44c6aab4e01323ed78641983b29633ad104f3fd
6+
# This way I use yafu It's broken down n
7+
p=99126027751293787460707333225370081580584982304038231096813161244761524095590615117831448502823590451345284755118126397029033735152688999710147646678545625634287769168400222908200102457283937611678386858046723404913983230996949238395868265074908432952904759110064966754913625273131550827408850464386561335667
8+
q=128965183581768163664978030498027146361112997382480284467816270831653077525969847879430397647540675619100157280183116707523593845084067419846780398725528236058905044567351849099700699570794288281913389080617917506884306793829926019232415711115188439634653794440433245851643026110952784986360042886715063777487
9+
e=65537
10+
c=0x19a98df2bfd703a31fedff8a02d43bc11f1fb3c15cfa7a55b6a32b3532e1ac477f6accc448f9b7d2b4deaae887450217bb70298afaa0f5e31a77e7c6f8ba1986979f15d299230119e3dd7e42eb9ca4d58d084d18b328fbe08c8909a2afc67866d6550e4e6fa27dc13d05c51cc87259fe73e2a1890cc2825d76c8b2a99f72f6023fc96658ac355487a6c275717ca6c13551094818efae1cec3c8773cc5a72fed518c00a53ba9799d9d5c182795dfcece07c727183fdd86fd2cb4b95e9f231be1858320aa7f8430885eb3d24300552d1a83158636316e55e6ac0a30a608964dbf2c412aed6a15df5fd49e737f7c06c02360d0c292abc33a3735152db2fb5bc5f6d
11+
12+
13+
phi=(p-1)*(q-1)
14+
d=gmpy2.invert(e,phi)
15+
m=pow(c,d,n)
16+
print(hex(m))
17+
print(binascii.unhexlify(hex(m)[2:].strip("L")))

crypto/very-smooth/decrypt2.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/usr/bin/env python
2+
# -*- coding:utf-8 -*-
3+
import binascii
4+
import gmpy2
5+
n=0x65446ab139efe9744c78a271ad04d94ce541a299f9d4dcb658f66f49414fb913d8ac6c90dacc1ad43135454c3c5ac76c56d71d2816dac23db5c8caa773ae2397bd5909a1f2823c230f44ac684c437f16e4ca75d50b75d2f7e5549c034aa8a723c9eaa904572a8c5c6c1ed7093a0695522a5c41575c4dbf1158ca940c02b223f50ae86e6782819278d989200a2cd2be4b7b303dffd07209752ee5a3060c6d910a108444c7a769d003bf8976617b4459fdc15a2a73fc661564267f55be6a0d0d2ec4c06a4951df5a096b079d9e300f7ad72fa6c73a630f9a38e472563434c10225bde7d08c651bdd23fd471077d44c6aab4e01323ed78641983b29633ad104f3fd
6+
# This way I use yafu It's broken down n
7+
p=22830115979126629415193533117812360558137319176068500266603726879644325590291450954659533053975707896336537320522199421734158898847260214507005326123049297924297169241035902335701247618057835505595499700876972466126448177857781577724674820675830570842051823752434923441305580560689662769924138373183602309520419507227158627990235477030312301162435924114933053817957544525360509591601721150926936504168403258640169278288814361039235934790252
8+
q=559953632227062196228786501117690084867053705419198555332244725193575207011617206250429837737932190375308375289859718816462794714551958191112622937004456385913210632658931941376
9+
e=0x10001
10+
c=0x19a98df2bfd703a31fedff8a02d43bc11f1fb3c15cfa7a55b6a32b3532e1ac477f6accc448f9b7d2b4deaae887450217bb70298afaa0f5e31a77e7c6f8ba1986979f15d299230119e3dd7e42eb9ca4d58d084d18b328fbe08c8909a2afc67866d6550e4e6fa27dc13d05c51cc87259fe73e2a1890cc2825d76c8b2a99f72f6023fc96658ac355487a6c275717ca6c13551094818efae1cec3c8773cc5a72fed518c00a53ba9799d9d5c182795dfcece07c727183fdd86fd2cb4b95e9f231be1858320aa7f8430885eb3d24300552d1a83158636316e55e6ac0a30a608964dbf2c412aed6a15df5fd49e737f7c06c02360d0c292abc33a3735152db2fb5bc5f6d
11+
12+
13+
phi=(p-1)*(q-1)
14+
d=gmpy2.invert(e,phi)
15+
m=pow(c,d,n)
16+
print(hex(m))
17+
print(binascii.unhexlify(hex(m)[2:].strip("L")))

crypto/very-smooth/flag.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
teste

crypto/very-smooth/gen.py

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#!/usr/bin/python
2+
3+
from binascii import hexlify
4+
from gmpy2 import *
5+
import math
6+
import os
7+
import sys
8+
9+
if sys.version_info < (3, 9):
10+
math.gcd = gcd
11+
math.lcm = lcm
12+
13+
_DEBUG = True
14+
15+
FLAG = open('flag.txt').read().strip()
16+
FLAG = mpz(hexlify(FLAG.encode()), 16)
17+
SEED = mpz(hexlify(os.urandom(32)).decode(), 16)
18+
STATE = random_state(SEED)
19+
20+
def get_prime(state, bits):
21+
return next_prime(mpz_urandomb(state, bits) | (1 << (bits - 1)))
22+
23+
def get_smooth_prime(state, bits, smoothness=16):
24+
p = mpz(2)
25+
p_factors = [p]
26+
while p.bit_length() < bits - 2 * smoothness:
27+
factor = get_prime(state, smoothness)
28+
p_factors.append(factor)
29+
p *= factor
30+
31+
bitcnt = (bits - p.bit_length()) // 2
32+
33+
while True:
34+
prime1 = get_prime(state, bitcnt)
35+
prime2 = get_prime(state, bitcnt)
36+
tmpp = p * prime1 * prime2
37+
if tmpp.bit_length() < bits:
38+
bitcnt += 1
39+
continue
40+
if tmpp.bit_length() > bits:
41+
bitcnt -= 1
42+
continue
43+
if is_prime(tmpp + 1):
44+
p_factors.append(prime1)
45+
p_factors.append(prime2)
46+
p = tmpp + 1
47+
break
48+
49+
p_factors.sort()
50+
51+
return (p, p_factors)
52+
53+
e = 0x10001
54+
55+
while True:
56+
p, p_factors = get_smooth_prime(STATE, 1024, 16)
57+
if len(p_factors) != len(set(p_factors)):
58+
continue
59+
# Smoothness should be different or some might encounter issues.
60+
q, q_factors = get_smooth_prime(STATE, 1024, 17)
61+
if len(q_factors) != len(set(q_factors)):
62+
continue
63+
factors = p_factors + q_factors
64+
if e not in factors:
65+
break
66+
67+
if _DEBUG:
68+
import sys
69+
sys.stderr.write(f'p = {p.digits(16)}\n\n')
70+
sys.stderr.write(f'p_factors = [\n')
71+
for factor in p_factors:
72+
sys.stderr.write(f' {factor.digits(16)},\n')
73+
sys.stderr.write(f']\n\n')
74+
75+
sys.stderr.write(f'q = {q.digits(16)}\n\n')
76+
sys.stderr.write(f'q_factors = [\n')
77+
for factor in q_factors:
78+
sys.stderr.write(f' {factor.digits(16)},\n')
79+
sys.stderr.write(f']\n\n')
80+
81+
n = p * q
82+
83+
m = math.lcm(p - 1, q - 1)
84+
d = pow(e, -1, m)
85+
86+
c = pow(FLAG, e, n)
87+
88+
print(f'n = {n.digits(16)}')
89+
print(f'c = {c.digits(16)}')

crypto/very-smooth/output.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
n = 65446ab139efe9744c78a271ad04d94ce541a299f9d4dcb658f66f49414fb913d8ac6c90dacc1ad43135454c3c5ac76c56d71d2816dac23db5c8caa773ae2397bd5909a1f2823c230f44ac684c437f16e4ca75d50b75d2f7e5549c034aa8a723c9eaa904572a8c5c6c1ed7093a0695522a5c41575c4dbf1158ca940c02b223f50ae86e6782819278d989200a2cd2be4b7b303dffd07209752ee5a3060c6d910a108444c7a769d003bf8976617b4459fdc15a2a73fc661564267f55be6a0d0d2ec4c06a4951df5a096b079d9e300f7ad72fa6c73a630f9a38e472563434c10225bde7d08c651bdd23fd471077d44c6aab4e01323ed78641983b29633ad104f3fd
2+
c = 19a98df2bfd703a31fedff8a02d43bc11f1fb3c15cfa7a55b6a32b3532e1ac477f6accc448f9b7d2b4deaae887450217bb70298afaa0f5e31a77e7c6f8ba1986979f15d299230119e3dd7e42eb9ca4d58d084d18b328fbe08c8909a2afc67866d6550e4e6fa27dc13d05c51cc87259fe73e2a1890cc2825d76c8b2a99f72f6023fc96658ac355487a6c275717ca6c13551094818efae1cec3c8773cc5a72fed518c00a53ba9799d9d5c182795dfcece07c727183fdd86fd2cb4b95e9f231be1858320aa7f8430885eb3d24300552d1a83158636316e55e6ac0a30a608964dbf2c412aed6a15df5fd49e737f7c06c02360d0c292abc33a3735152db2fb5bc5f6d

0 commit comments

Comments
 (0)