Я зашифровал сообщение, но решил перестраховаться и добавить немного рандома. Теперь всё точно безопасно!
Зашифрованный флаг должен иметь вид: Course{****************}, где количество * может быть любым, но слово Course и {} точно есть в флаге
Даны ключи:
N = 0xc8a92051a5845b2886cf515860ed4c93399218afaa67aa069d48650fc0db04b2df346886032c1f528aa201aeb103575da8b5901c5bfb22c2c98a4935abea66a1b9568ee966c1de17d1736aa7502262a6f435ec9aa43e418a7df1e89432222ff493ec00870c291dc9ab320edd415e50bcea384383b1f4588c170e30c0ead832ab0d4d9575f70eaf7750db6629208d8175038bfc2b805bf6cbd8aae0b0f28bdd8529b9fd9fe4ff5b0f86308d7541115b116263519447e98027e9f0032933aa290c86675b7d06cfc37ba28da88201e2d3ae14dcf03bebc9be8f278c31dd1271fd428cfbc8e83e5d4ad74a7716745cf71639b966c0ba725ffdf539f25619d692fd3d
e = 5
c1 = 0x69177ef31a4df79aea7d9c34a42db7996b758c55f8102d894204339b42c48ce240cb09879edae835993323960a2a20598b40a86c515d500f3353dd1559a340abed21304da305d1a7f179b2c46b302f282405fc1e1efc800a47410ab5ebd9942bf425a342731e5525051af79460ea036107e04f98feb779bbaa950f2dbbde691275414c4a41ceee632a2336f70ffa18b1b7d5ac38a46104df44dc44fdbbc405ec7e0b2e200e57d96f90dc6cfc508efced5122abcd6ee4464a8832b9d62b397f26fc29a8c81979091f8249cd4cadd482f6389dcc7b48f3bc307d69d45e7a1a994646394802e50462e6b92deb589135b6e4b643ff6208741a79219be66d292b57b7
c2 = 0x8021694922414189fc02dca1b531469f69a79c9c4c7a981ef0be86a59d3bd3f016be98d385a61c31b65fa61962cfe9d8e8862f49ea5c173d46c705591dd153fa29d372bf8eacb74c0b8d240561f49e746a6dd2ce05494116cdfa3d2b37c75bb19930013c2ccc94c64c61f022b314ccfcc3d673384c501cb60cb270a5aef81d075e418688b0a8b890b5da279d1619f008a8e481f0b94248ab966bc4909cb17d93afe4fa1f4929d87f46e67fdfadec9c67201005d13e4028ff54817c6facb9ba38416cc81790d8365942f045b09231ab1013ab128a9b5f69129917fac0b8624881c39fc7b2699c8d701995bdcf115a889753df9e98bdb074aaa31df0ec7b3ff1b
Дан файлик на питоне с шифровкой:
Зашифрованный флаг должен иметь вид: Course{****************}, где количество * может быть любым, но слово Course и {} точно есть в флаге
Даны ключи:
N = 0xc8a92051a5845b2886cf515860ed4c93399218afaa67aa069d48650fc0db04b2df346886032c1f528aa201aeb103575da8b5901c5bfb22c2c98a4935abea66a1b9568ee966c1de17d1736aa7502262a6f435ec9aa43e418a7df1e89432222ff493ec00870c291dc9ab320edd415e50bcea384383b1f4588c170e30c0ead832ab0d4d9575f70eaf7750db6629208d8175038bfc2b805bf6cbd8aae0b0f28bdd8529b9fd9fe4ff5b0f86308d7541115b116263519447e98027e9f0032933aa290c86675b7d06cfc37ba28da88201e2d3ae14dcf03bebc9be8f278c31dd1271fd428cfbc8e83e5d4ad74a7716745cf71639b966c0ba725ffdf539f25619d692fd3d
e = 5
c1 = 0x69177ef31a4df79aea7d9c34a42db7996b758c55f8102d894204339b42c48ce240cb09879edae835993323960a2a20598b40a86c515d500f3353dd1559a340abed21304da305d1a7f179b2c46b302f282405fc1e1efc800a47410ab5ebd9942bf425a342731e5525051af79460ea036107e04f98feb779bbaa950f2dbbde691275414c4a41ceee632a2336f70ffa18b1b7d5ac38a46104df44dc44fdbbc405ec7e0b2e200e57d96f90dc6cfc508efced5122abcd6ee4464a8832b9d62b397f26fc29a8c81979091f8249cd4cadd482f6389dcc7b48f3bc307d69d45e7a1a994646394802e50462e6b92deb589135b6e4b643ff6208741a79219be66d292b57b7
c2 = 0x8021694922414189fc02dca1b531469f69a79c9c4c7a981ef0be86a59d3bd3f016be98d385a61c31b65fa61962cfe9d8e8862f49ea5c173d46c705591dd153fa29d372bf8eacb74c0b8d240561f49e746a6dd2ce05494116cdfa3d2b37c75bb19930013c2ccc94c64c61f022b314ccfcc3d673384c501cb60cb270a5aef81d075e418688b0a8b890b5da279d1619f008a8e481f0b94248ab966bc4909cb17d93afe4fa1f4929d87f46e67fdfadec9c67201005d13e4028ff54817c6facb9ba38416cc81790d8365942f045b09231ab1013ab128a9b5f69129917fac0b8624881c39fc7b2699c8d701995bdcf115a889753df9e98bdb074aaa31df0ec7b3ff1b
Дан файлик на питоне с шифровкой:
Python:
from random import Random
from Cryptodome.Util.number import getStrongPrime, inverse, GCD, bytes_to_long
def read_flag():
with open('flag.txt', 'rb') as f:
return b'This is my flag: ' + f.read()
def gen_key():
e = 5
while True:
p, q = getStrongPrime(1024), getStrongPrime(1024)
N = p * q
phi = (p - 1) * (q - 1)
if GCD(e, phi) == 1:
d = inverse(e, phi)
return N, e, d
if __name__ == '__main__':
N, e, d = gen_key()
flag = read_flag()
m = bytes_to_long(flag)
assert pow(m, e) > N
print(f'N = {hex(N)}')
print(f'e = {e}')
c1 = pow(m, e, N)
assert pow(c1, d, N) == m
random = Random()
random.seed(N)
r = random.getrandbits(1024)
c2 = pow(m + r, e, N)
assert pow(c2, d, N) == m + r
print(f'c1 = {hex(c1)}')
print(f'c2 = {hex(c2)}')