Sharif University CTF Quals – Crypto 300
Chúng ta cần tìm một số x sao cho:
(11111111111111111111112 ^ x) % 123456790123456790123454320987654320987654321 = 1173805180904286755555543817503746512689
Nội dung chính
Đây là một bài mà ngay khi đọc đề, trong trái tim nhân hậu và đầy thiện lương của mình sớm phát sinh hai luồng suy nghĩ trái chiều:
- Một là mình có thể làm được nó
- Hai là, nếu mình có thể làm được nó chỉ sau ánh mắt nhìn đầu tiên, thì sao nó lại có giá 300 điểm?
Một lần nữa lại buộc phải sống chậm lại để thấy được rằng, chẳng có gì là công bằng, chẳng có gì là hoàn hảo cả. Một bài 300 điểm có thể dễ, một bài 100 điểm có thể khó, sống tử tế thì thường ế mà sống khốn nạn thì nhiều người ngó…
Sau vài ba phút lang thang trên Google, đọc qua biết bao là bí kíp Toán học trên trời dưới bể, Féc Ma rồi Ơ Clít, ghi ghi chép chép trên cuốn vở ô ly chi chít chữ, đi đến một phát hiện quan trọng như đang mộng:
1
2
3
4
5
|
num = 11111111111111111111112
for i in range(1, 10):
num *= 11111111111111111111112
num %= 123456790123456790123454320987654320987654321
print i, num
|
Output:
1
2
3
4
5
6
7
8
9
|
1 22222222222222222222223
2 33333333333333333333334
3 44444444444444444444445
4 55555555555555555555556
5 66666666666666666666667
6 77777777777777777777778
7 88888888888888888888889
8 100000000000000000000000
9 111111111111111111111111
|
Chúng ta xác định x bằng cách:
y = (1173805180904286755555543817503746512689 - 11111111111111111111112) / 11111111111111111111111
= 105642466281385807
x = y + 1
= 105642466281385808
flag = md5(x) = d0cacf9701b449aae0b236f1626d5688.
0 comments:
Post a Comment