try to decrypt - Text 1 (middle)
문제 페이지를 보면 아래와 같은 문자열이 적혀있다.
21052F151200271512413E35101A152F3511
위 암호화된 문자열을 보면 16진수로 예상할 수 있다.
21052F151200271512413E35101A152F3511
우선 영문자 알파벳을 암호화 해보았다.
270B41450E1011052F1C161804353E371D1F15211A23000C3B30
abcdefghijklmnopqrstuvwxyz
1E13253C292C31220D0F34383A3D02082D362432200A063F1914
ABCDEFGHIJKLMNOPQRSTUVWXYZ
1B43172B012E09333926034207442846
123456789_.,;:?!
문제를 풀기 위해 암호화된 문자열을 유추해보았다.
270B41450E1011052F1C161804353E371D1F15211A23000C3B30
abcdefghijklmnopqrstuvwxyz
1E13253C292C31220D0F34383A3D02082D362432200A063F1914
ABCDEFGHIJKLMNOPQRSTUVWXYZ
1B43172B012E09333926034207442846
123456789_.,;:?!
암호문
2105 2F15 1200 2715 1241 3E35 101A 152F 3511
암호문의 문자열을 4개씩, 2개씩 으로 잘라두었다.
2105 2F15 1200 2715 1241 3E35 101A 152F 3511
21 05 2F 15 12 00 27 15 12 41 3E 35 10 1A 15 2F 35 11
문자열을 비교해보았다.
4개씩으로 자르니 글자가 맞지 않는다.
270B 4145 0E10 1105 2F1C 1618 0435 3E37 1D1F 1521 1A23 000C 3B30
27 0B 41 45 0E 10 11 05 2F 1C 16 18 04 35 3E 37 1D 1F 15 21 1A 23 00 0C 3B 30
a b c d e f g h i j k l m n o p q r s t u v w x y z
1E13 253C 292C 3122 0D0F 3438 3A3D 0208 2D36 2432 200A 063F 1914
1E 13 25 3C 29 2C 31 22 0D 0F 34 38 3A 3D 02 08 2D 36 24 32 20 0A 06 3F 19 14
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1B43 172B 012E 0933 3926 0342 0744 2846
1B 43 17 2B 01 2E 09 33 39 26 03 42 07 44 28 46
1 2 3 4 5 6 7 8 9 _ . , ; : ? !
21 05 2F 15 12 00 27 15 12 41 3E 35 10 1A 15 2F 35 11
t h i s w a s c o n f u s i n g
정답으로 넣을 문자열 정렬을 해보면 다음과 같다.
this was confusing
this was confusing라는 문자열이 나와서 정답으로 입력해보았다.
try to decrypt - Text 2 (middle)
문제 페이지를 보면 아래와 같은 문자열이 적혀있다.
아래 암호화된 문자열을 보면 16진수가 아닌 일반 영문으로 보인다.
eaidagdagenpmgodlceijmgoefodlceijcnllonmgodlcfilfgamgodnnflgfgafilmgofildihdagmgoefodlccnlcnledddagmgoedddagfobdagedd
한 문자당 몇 글자씩인지 확인했더니 3글자씩 나누면 될 것 같다.
eai dag dag enp mgo dlc eij mgo efo dlc eij cnl lon mgo dlc fil fga mgo dnn flg
fga fil mgo fil dih dag mgo efo dlc cnl cnl edd dag mgo edd dag fob dag edd
우선 영문자 알파벳을 암호화 해보았다.
cfk cif cla cnl dag ddb dfm dih dlc dnn eai edd efo eij ele enp fak fdf fga fil
a b c d e f g h i j k l m n o p q r s t
flg fob gam gdh ggc gin
u v w x y z
gli god hao hdj hge hip hlk hof iba idl igg ijb ilm ioh jbc jdn jgi jjd jlo joj
A B C D E F G H I J K L M N O P Q R S T
kbe kdp kgk kjf kma kol
U V W X Y Z
anh bac bcn bfi bid bko bnj cae ccp leb lgm ljh lmc lon mbi med
1 2 3 4 5 6 7 8 9 _ . , ; : ? !
문제를 풀기 위해 암호화된 문자열을 유추해보았다.
cfk cif cla cnl dag ddb dfm dih dlc dnn eai edd efo eij ele enp fak fdf fga fil
a b c d e f g h i j k l m n o p q r s t
flg fob gam gdh ggc gin
u v w x y z
gli god hao hdj hge hip hlk hof iba idl igg ijb ilm ioh jbc jdn jgi jjd jlo joj
A B C D E F G H I J K L M N O P Q R S T
kbe kdp kgk kjf kma kol
U V W X Y Z
anh bac bcn bfi bid bko bnj cae ccp leb lgm ljh lmc lon mbi med
1 2 3 4 5 6 7 8 9 _ . , ; : ? !
암호문
eai dag dag enp mgo dlc eij mgo efo dlc eij cnl lon mgo dlc fil fga mgo dnn flg
k e e p i n m i n d : i t s j u
fga fil mgo fil dih dag mgo efo dlc cnl cnl edd dag mgo edd dag fob dag edd
s t t h e m i d d l e l e v e l
정답으로 넣을 문자열 정렬을 해보면 다음과 같다.
keep in mind: its just the middle level
keep in mind: its just the middle level 라는 문자열이 나와서 정답으로 입력해보았다.
try to decrypt - Text 3 (middle)
문제 페이지를 보면 아래와 같은 문자열이 적혀있다.
아래 암호화된 문자열을 보면 16진수가 아닌 일반 영문으로 보인다.
6224F12C1C3FAA5AA54836B3C446D6415E74
한 문자당 몇 글자씩인지 확인했더니 3글자씩 나누면 될 것 같다.
622 4F1 2C1 C3F AA5 AA5 483 6B3 C44 6D6 415 E74
우선 입력 가능한 문자열들을 암호화해보았다.
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789_.,;:?!
668 438 208 0D7 E97 C67 A37 807 6D6 4A6 276 046 E06 CD5 AA5 875 645 415 2E4 0B4
a b c d e f g h i j k l m n o p q r s t
E74 C44 A14 8E3 6B3 483
u v w x y z
A7D 84D 61D 4EC 2BC 08C E4C C1C AEB 8BB 68B 45B 22B 0FA EBA C8A A5A 82A 6F9 4C9
A B C D E F G H I J K L M N O P Q R S T
299 069 E29 CF8 AC8 898
U V W X Y Z
A0F 8DE 6AE 47E 24E 01E EDD 253 023 EE2 CB2 A82 852 622 4F1 2C1 091
0 1 2 3 4 5 6 7 8 9 _ . , ; : ? !
문제를 풀기 위해 암호화된 문자열을 유추해보았다.
668 438 208 0D7 E97 C67 A37 807 6D6 4A6 276 046 E06 CD5 AA5 875 645 415 2E4 0B4
a b c d e f g h i j k l m n o p q r s t
E74 C44 A14 8E3 6B3 483
u v w x y z
A7D 84D 61D 4EC 2BC 08C E4C C1C AEB 8BB 68B 45B 22B 0FA EBA C8A A5A 82A 6F9 4C9
A B C D E F G H I J K L M N O P Q R S T
299 069 E29 CF8 AC8 898
U V W X Y Z
A0F 8DE 6AE 47E 24E 01E EDD 253 023 EE2 CB2 A82 852 622 4F1 2C1 091
0 1 2 3 4 5 6 7 8 9 _ . , ; : ? !
암호문
622 4F1 2C1 C3F AA5 AA5 483 6B3 C44 6D6 415 E74
; : ? o o z y v i r u
뭔가 이상해서 확인해보니 출력된 문자열의 값이 역순서로 출력되고 있었다.
아래 코드를 사용하여 순서를 바꿔주었다.
# 글자 수 자르기
def insert_space(string, n):
result = ""
for i in range(0, len(string), n):
result += string[i:i+n] + " "
return result.strip()
# 글자 수 세기
def count_characters(string):
return len(string)
# 문자열 순서 반대로 출력
def reverse_string_order(string):
return ' '.join(string.split()[::-1])
# 테스트
input_string = "A0F8DE6AE47E24E01EEDD253023EE2CB2A828526224F12C1091"
result = insert_space(input_string, 3)
character_count = count_characters(input_string)
print("\\n===============================결과출력===============================\\n")
print("입력한 문자열의 수 :", character_count)
print("입력한 문자열 :", input_string, "\\n")
print(result + "\\n")
print("자른 문자열 역순서 출력 :", reverse_string_order(result))
483 6B3 8E3 A14 C44 E74 0B4 2E4 415 645 875 AA5 CD5 E06 046 276 4A6 6D6 807 A37
a b c d e f g h i j k l m n o p q r s t
C67 E97 0D7 208 438 668
u v w x y z
898 AC8 CF8 E29 069 299 4C9 6F9 82A A5A C8A EBA 0FA 22B 45B 68B 8BB AEB C1C E4C
A B C D E F G H I J K L M N O P Q R S T
08C 2BC 4EC 61D 84D A7D
U V W X Y Z
091 2C1 4F1 622 852 A82 CB2 EE2 023 253 EDD 01E 24E 47E 6AE 8DE A0F
0 1 2 3 4 5 6 7 8 9 _ . , ; : ? !
암호문
622 4F1 2C1 C3F AA5 AA5 483 6B3 C44 6D6 415 E74
3 2 1 l l a b e r i f
정답으로 넣을 문자열 정렬을 해보면 다음과 같다.
321 llaberif
정답을 입력할 때에도 순서를 바꿔서 입력해야 한다.
그럼 fireball 123 이 나온다.
try to decrypt - Text 4 (middle)
문제 페이지를 보면 아래와 같은 문자열이 적혀있다.
아래 암호화된 문자열을 보면 16진수가 아닌 일반 영문으로 보인다.
261129152E152B
한 문자당 몇 글자씩인지 확인했더니 2글자씩 나누면 될 것 같다.
26 11 29 15 2E 15 2B
우선 입력 가능한 문자열들을 암호화해보았다.
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789_.,;:?!
1A 1C 1E 1D 1F 21 20 22 24 23 25 27 26 28 2A 29 2B 2D 2C 2E 30 2F 31 33 32 34
a b c d e f g h i j k l m n o p q r s t u v w x y z
34 36 38 37 39 3B 3A 3C 3E 3D 3F 41 40 42 44 43 45 47 46 48 4A 49 4B 4D 4C 4E
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
10 12 14 13 15 17 16 18 1A 19 50 52 51 53 55 54 56 58
0 1 2 3 4 5 6 7 8 9 _ . , ; : ? !
문제를 풀기 위해 암호화된 문자열을 유추해보았다.
1A 1C 1E 1D 1F 21 20 22 24 23 25 27 26 28 2A 29 2B 2D 2C 2E 30 2F 31 33 32 34
a b c d e f g h i j k l m n o p q r s t u v w x y z
34 36 38 37 39 3B 3A 3C 3E 3D 3F 41 40 42 44 43 45 47 46 48 4A 49 4B 4D 4C 4E
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
10 12 14 13 15 17 16 18 1A 19 50 52 51 53 55 54 56 58
0 1 2 3 4 5 6 7 8 9 _ . , ; : ? !
암호문
26 11 29 15 2E 15 2B
m 0 n 5 t 3 r
정답을 입력했었으나 Encrypt의 값이 이상했다.
암호문의 배열의 제자리 값들과 맞지 않았다.
암호문
26 11 29 15 2E 15 2B
m 0 n 5 t 3 r
정답은 m0n5t3r 로 나왔다.
+++
정답 입력 후 왜 문제의 정답이 저렇게 나오는지 계속 파고들어보았다.
0은 3개씩 10 11 12 로 반복되고 있었다.
대신 앞에 영문자가 오면 10이 아닌 11 12가 바로 오는것을 보아 0은 위치한 순서에 따라 값이 바뀌는 것 같다.
이 결과로 모든 숫자의 값을 본다면
000 -> 10 11 12
111 -> 11 12 13
222 -> 12 13 14
333 -> 13 14 15
444 -> 14 15 16
555 -> 15 16 17
666 -> 16 17 18
777 -> 17 18 19
888 -> 18 19 20
999 -> 19 20 21
영문자도 숫자처럼 반복되는 것을 보아 모든 문자열이 그런 것 같다.
그러므로 아래와 같이 따져볼 수 있다.
암호문
26 11 29 15 2E 15 2B
m 0 n 5 t 3 r
m = 1번자리 26
0 = 2번자리 11
n = 3번자리 29
5 = 1번자리 15
t = 2번자리 2E
3 = 3번자리 15
r = 1번자리 28
try to decrypt - Text 5 (middle)
문제 페이지를 보면 아래와 같은 문자열이 적혀있다.
아래 암호화된 문자열을 보면 16진수가 아닌 일반 영문으로 보인다.
3785824AD56B2531A7150DF44C21434A61E63F040A42F2012BC2F43F0AD535D24D46013213866D7E0
한 문자당 몇 글자씩인지 확인했더니 3글자씩 나누면 될 것 같다.
378 582 4AD 56B 253 1A7 150 DF4 4C2 143 4A6 1E6 3F0 40A 42F 201 2BC 2F4 3F0 AD5 35D 24D 460 132 138 66D 7E0
우선 입력 가능한 문자열들을 암호화해보았다.
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789_.,;:?!
120 31F 333 130 2DF 13B 168 439 3B1 1A2 3B1 171 1B0 553 42F 214 483 1A7 1F8 66D
a b c d e f g h i j k l m n o p q r s t
4AD 286 555 1DD 240 787
u v w x y z
258 7E5 555 31E 66D 225 2A0 8FF 5D3 390 73F 25B 2E8 A19 651 402 811 291 330 B33
A B C D E F G H I J K L M N O P Q R S T
6CF 474 8E3 2C7 378 C4D
U V W X Y Z
0A8 149 261 072 181 0E1 0F0 263 2DF 0E4 992 2F4 3B4 D38 7B6 545 A64 32A
0 1 2 3 4 5 6 7 8 9 _ . , ; : ? !
하나씩 끼워맞추기 하다가 예상가는 단어로 입력하면서 맞춰가다가 4번부터 다시 왜 값이 저렇게 나온건지 알아보고 왔다.
효과는 대단했다! 이번 문제도 4번과 비슷했다.
6글자씩 반복되었다.
하지만 반복되는 값의 연속성을 찾지 못했다….
우선 암호화 문자열을 API와 코드를 작성하여 다시 출력시켰다
a : 120 2F0 309 0F7 253 10E
b : 12C 31F 31E 10A 276 117
c : 138 34E 333 11D 299 120
d : 144 37D 348 130 2BC 129
e : 150 3AC 35D 143 2DF 132
f : 15C 3DB 372 156 302 13B
e : 168 40A 387 169 325 144
h : 174 439 39C 17C 348 14D
i : 180 468 3B1 18F 36B 156
j : 18C 497 3C6 1A2 38E 15F
k : 198 4C6 3DB 1B5 3B1 168
l : 1A4 4F5 3F0 1C8 3D4 171
m : 1B0 524 405 1DB 3F7 17A
n : 1BC 553 41A 1EE 41A 183
o : 1C8 582 42F 201 43D 18C
p : 1D4 5B1 444 214 460 195
q : 1E0 5E0 459 227 483 19E
r : 1EC 60F 46E 23A 4A6 1A7
s : 1F8 63E 483 24D 4C9 1B0
t : 204 66D 498 260 4EC 1B9
u : 210 69C 4AD 273 50F 1C2
v : 21C 6CB 4C2 286 532 1CB
w : 228 6FA 4D7 299 555 1D4
x : 234 729 4EC 2AC 578 1DD
y : 240 758 501 2BF 59B 1E6
z : 24C 787 516 2D2 5BE 1EF
A : 258 7B6 52B 2E5 5E1 1F8
B : 264 7E5 540 2F8 604 201
C : 270 814 555 30B 627 20A
D : 27C 843 56A 31E 64A 213
E : 288 872 57F 331 66D 21C
F : 294 8A1 594 344 690 225
.
.
.
암호문
378 582 4AD 56B 253 1A7 150 DF4 4C2 143 4A6 1E6 3F0 40A 42F 201 2BC 2F4
Y o u a r e v e r y g o o d .
3F0 AD5 35D 24D 460 132 138 66D 7E0
R e s p e c t !
참고로 아래 소스코드를 사용하여 문제 풀이를 참고했다.
import requests
def get_encrypted_text(url):
response = requests.get(url)
if response.status_code == 200:
return response.text
else:
return None
key = "Your API key"
id = "The ID of encryption method (see url of corresponding site)"
text = "The text you think the correct answer is"
#
url = f"<http://api.trytodecrypt.com/encrypt?key={key}&id={id}&text={text}>"
encrypted_text = get_encrypted_text(url)
if encrypted_text is not None:
print(encrypted_text)
else:
print("Failed to fetch encrypted text.")
# 글자 수 자르기
def insert_space(string, n):
result = ""
for i in range(0, len(string), n):
result += string[i:i+n] + " "
return result.strip()
def split_into_six(string):
words = string.split()
result = ""
count = 0
for word in words:
if count == 6:
result += "\\n"
count = 0
result += word + " "
count += 1
return result.strip()
# 글자 수 세기
def count_characters(string):
return len(string)
# 문자열 순서 반대로 출력
def reverse_string_order(string):
return ' '.join(string.split()[::-1])
# 테스트
input_string = "String"
result = insert_space(input_string, 3)
splitted_result = split_into_six(result)
character_count = count_characters(input_string)
print("\\n===============================결과출력===============================\\n")
print("입력한 문자열의 수 :", character_count)
print("입력한 문자열 :", input_string, "\\n")
print(result + "\\n")
print(splitted_result + "\\n")
print("자른 문자열 역순서 출력 :", reverse_string_order(result))
You are very good. Respect! 로 입력하여 맞는지 확인해보았다.
try to decrypt - Text 6 (middle)
문제 페이지를 보면 아래와 같은 문자열이 적혀있다.
아래 암호화된 문자열을 보면 16진수가 아닌 일반 영문으로 보인다.
00D02703603C0450461340870A50B50EA10A0BD133
한 문자당 몇 글자씩인지 확인했더니 3글자씩 나누면 될 것 같다.
00D 027 036 03C 045 046 134 087 0A5 0B5 0EA 10A 0BD 133
앞의 문제들을 풀었던 경험으로 문자열이 반복되는 경우 어떻게 암호화되는지 확인해보았다.
aaaaaaaaaa(10) 를 입력했을 경우 결과는 아래와 같이 나온다.
00B 012 01A 023 02D 038 044 051 05F 06E
확실하게 보기 위해 숫자를 조금더 출력시켜보았다.
00B 012 01A 023 02D 038 044 051 05F 06E 07E 08F 0A1 0B4 0C8 0DD 0F3 10A 122 13B 155 aaaaaaaa
00C 013 01C 025 030 03B 048 055 064 073 084 095 0A8 0BB bbbbbbbbbbbbbb
025 039 04E 064 07B 093 0AC 0C6 0E1 0FD 11A AAAAAAAAAAA
026 03A 050 066 07E 096 0B0 0CA 0E6 102 120 13E 15E 17E 1A0 BBBBBBBBBBBBBBB
001 003 006 00A 00F 015 01C 024 02D 037 042 04E 05B 069 078 088 099 0AB 000000
002 004 008 00C 012 018 020 028 032 03C 048 054 062 070 080 111111111
040 061 084 0A7 0CC 0F1 118 13F 168 191 __________
000000을 통해 값의 변화를 보니 1, 2, 3, 4, 5, 6…. 차례대로 자리 위치 값 만큽 값이 증가되고 있었다.
001 003 006 00A 00F 015 01C 024 02D 037 042 04E 05B 069 078 088 099 0AB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
정답을 유추해보았다.
00D 027 036 03C 045 046 134 087 0A5 0B5 0EA 10A 0BD 133
c o o k i e m o n s t e r