๋ฌธ์ : DreamHack โ likeb64 ๋ถ๋ฅ: Crypto ๋์ด๋: ๐ฑ ์์น FLAG:
DH{a9a8a8fc724c76b1916bfe64e63b8d024a94c05cc196a60e473ddfba855c90f2}
"๋๋ฆผ์ด๊ฐ base64๋ฅผ ๊ณต๋ถํ๊ณ ์์ ๋ง์ ์ํธ๋ฅผ ๋ง๋ค์์ด์." ๋ฌธ์ ์ค๋ช
ํ ์ค๊ณผ target.txt ์์ ๋ฌธ์์ด ํ๋๊ฐ ์ ๋ถ๋ค. ์ด๋ฆ์ด likeb64๋ผ ๋น์ฐํ base64๋ก ํ๋ฆฌ๊ฒ ๊ฑฐ๋ ํ๊ณ ์์ ๋๋ฉด, ํ์ด์ฌ์ด Invalid base64-encoded string์ ๋ฑ์ผ๋ฉฐ ์ฒ์๋ถํฐ ๋ฐ๋ชฉ์ ์ก๋๋ค. ์ด๋ฆ๊ฐ์ ์์ง ์๊ณ ๋ฌธ์์ด์ ์๊น์๋ฅผ ๋ฏ์ด๋ณด๋ฉด ์ ์ฒด๊ฐ ๋๋ฌ๋๋ค.
๋ฌธ์ ๊ฐ์
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋ฌธ์ ๋ช | likeb64 |
| ๋์ด๋ | ๐ฑ ์์น |
| ๋ถ๋ฅ | Crypto |
| ์ ๊ณต ํ์ผ | target.txt (์ํธ๋ฌธ ๋ฌธ์์ด 1๊ฐ) |
| ๋ชฉํ | ์ํธ๋ฌธ ๋ณตํธ โ ํ๋๊ทธ |
| ํต์ฌ ๊ธฐ๋ฒ | ์ปค์คํ
์ํ๋ฒณ base32 โ ํ์ค์ ์ซ์ 2-7 ์๋ฆฌ๋ฅผ a-f๋ก ์นํ |
์ด๋ฆ์ likeb64์ง๋ง, ๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด base64๊ฐ ์๋๋ผ base32๋ค. ๊ทธ๊ฒ๋ ์ํ๋ฒณ์ ๋ง์ง๋ง 6์นธ๋ง ์ด์ง ๋ฐ๊ฟ์น๊ธฐํ ๊ฒ์ด๋ผ, ๊ทธ ์ฌ์ค๋ง ์์์ฑ๋ฉด ํ ์ค๋ก ๋ณตํธ๋๋ค. ์ ์ ๋ฌธ์ ๋ "์ด๊ฒ base32๋ค"๋ผ๋ ๊ฑธ ๋์น์ฑ๋ ๊ด์ฐฐ์ ๊ณผ์ ์ ์๋ค.
๋ฐฐ๊ฒฝ โ base64 ์ base32 ๋ ๋ญ๊ฐ ๋ค๋ฅธ๊ฐ
๋ ๋ค ๋ฐ์ด๋๋ฆฌ๋ฅผ ์์คํค ํ ์คํธ๋ก ์ฎ๊ธฐ๋ ์ธ์ฝ๋ฉ์ด์ง๋ง, ํ ๊ธ์์ ๋ช ๋นํธ๋ฅผ ๋ด๋๋๊ฐ ๋ค๋ฅด๋ค.
- base64: 6๋นํธ์ฉ ๋๋๋ค. ์ํ๋ฒณ์ 64์นธ(
A-Z a-z 0-9 + /). ์๋ณธ 3๋ฐ์ดํธ(24๋นํธ)๊ฐ ์ ํํ 4๊ธ์(24๋นํธ)๋ก ๋จ์ด์ ธ์, ์ถ๋ ฅ์ 4๊ธ์ ๋จ์๋ก ๋ฌถ์ธ๋ค. 24๋นํธ์ ์ ๋ง๋ ๊ผฌ๋ฆฌ๋=ํ๋๋ ๋๋ก ์ฑ์ด๋ค. ๊ทธ๋์ base64์=ํจ๋ฉ์ ์ต๋ 2๊ฐ๋ค. - base32: 5๋นํธ์ฉ ๋๋๋ค. ์ํ๋ฒณ์ 32์นธ, RFC 4648 ํ์ค์ผ๋ก๋
ABCDEFGHIJKLMNOPQRSTUVWXYZ234567์ด๋ค. ์๋ณธ 5๋ฐ์ดํธ(40๋นํธ)๊ฐ 8๊ธ์(40๋นํธ)๋ก ๋จ์ด์ ธ์, ์ถ๋ ฅ์ 8๊ธ์ ๋จ์๋ก ๋ฌถ์ธ๋ค. 40๋นํธ์ ์ ๋ง๋ ๊ผฌ๋ฆฌ๋=๋ก ์ฑ์ฐ๋๋ฐ, ์ด๋ ํจ๋ฉ ๊ฐ์๋ ์๋ณธ ๊ธธ์ด์ ๋ฐ๋ผ 6ยท4ยท3ยท1๊ฐ๊ฐ ๋์ฌ ์ ์๋ค.
์ฌ๊ธฐ์ base32 ์ํ๋ฒณ์ ๋ค์ ๋ณด์. ์ 26์นธ์ A-Z, ๋ค 6์นธ์ **์ซ์ 2-7**์ด๋ค. base64์ ๋ฌ๋ฆฌ ์๋ฌธ์๋ ์๊ณ +, /๋ ์๋ค. ๋ง์ฝ ๋๊ตฐ๊ฐ ์ด ๋ค์ชฝ ์ซ์ 6์นธ์ ๋ค๋ฅธ ๋ฌธ์๋ก ๋ฐ๊ฟ์น๊ธฐํ๋ฉด, ๊ฒ๋ณด๊ธฐ ๋ฌธ์์
๋ง ๋ฌ๋ผ์ง ๋ฟ ์ธ์ฝ๋ฉ ์๋ฆฌ๋ ๊ทธ๋๋ก๋ค. ์ด ๋ฌธ์ ๊ฐ ๋ฑ ๊ทธ ์ฅ๋์ ์ณค๋ค.
๐ฌ ์ ์ฐฐ โ ๋ฐ์ ๊ฑด ๋ฌธ์์ด ํ๋
์์ถ์ ํ๋ฉด target.txt ํ๋๋ฟ์ด๋ค. ๋จผ์ ํ์ผ์ ๋์ผ๋ก ๋ณด๊ณ , ๊ธธ์ดยทํจ๋ฉยท๊ผฌ๋ฆฌ ๋ฐ์ดํธ๋ฅผ ์ผ๋ค.
cat target.txt; echo
tail -c 12 target.txt | od -An -c # ๊ผฌ๋ฆฌ ๋ฐ์ดํธ (ํจ๋ฉ ํ์ธ)
echo "chars: $(tr -d '\n' < target.txt | wc -c) =(pad): $(tr -cd '=' < target.txt | wc -c)"
๋ฌธ์์ด์ 112์, ๋์ ===๋ก ํจ๋ฉ์ด 3๊ฐ๋ค. ์ฌ๊ธฐ์ ์ด๋ฏธ base64๊ฐ ์๋๋ค. base64์ =๋ ์๋ฌด๋ฆฌ ๋ง์์ผ 2๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ์ข ๋ ์ ๋์ ์ผ๋ก ๋ฏ์ด๋ณด๋ ค๊ณ ์งง์ ์ ์ฐฐ ์คํฌ๋ฆฝํธ๋ฅผ ํ๋ ๋๋ ธ๋ค.
# why_b32.py โ ์ ๋ง base64 ์ธ์ง ๊ฒ์ฆ
import collections
ct = open("target.txt").read().strip()
data = ct.rstrip("=")
npad = len(ct) - len(data)
print(f"์ ์ฒด ๊ธธ์ด : {len(ct)}")
print(f"ํจ๋ฉ '=' ๊ฐ์ : {npad} (base64๋ ์ต๋ 2, 3์ ๋ถ๊ฐ โ base64 ์๋)")
print(f"๋ฐ์ดํฐ ๊ธธ์ด : {len(data)} ({len(data)}%4={len(data)%4} โ base64 ๊ทธ๋ฃน(4) ์ ๋ง์)")
print(f"distinct ์ฌ๋ณผ : {len(set(data))}๊ฐ {''.join(sorted(set(data)))}")
print(f"์ซ์/+// ์ ๋ฌด : {any(c.isdigit() for c in data)} / {any(c in '+/' for c in data)}")
print()
print("== base32 ๋ก ๋ณด๋ฉด ๋ฑ ๋ง๋๋ค ==")
print(f"112 = 8 ร 14 ๊ทธ๋ฃน (base32๋ 8๋ฌธ์ ๊ทธ๋ฃน)")
print(f"๋ฐ์ดํฐ {len(data)}์ = 13ร8 + 5 โ 13ร5 + 3 = 68 ๋ฐ์ดํธ (ํ๋๊ทธ ๊ธธ์ด์ ์ผ์น)")
์ ๋ฆฌํ๋ฉด ์ธ ๊ฐ์ง๊ฐ ์ ๋ถ base64๋ฅผ ๋ถ์ ํ๋ค.
=ํจ๋ฉ์ด 3๊ฐ โ base64๋ ์ต๋ 2๊ฐ.- ๋ฐ์ดํฐ๊ฐ 109์์ด๊ณ
109 % 4 == 1โ base64๋ 4๊ธ์ ๊ทธ๋ฃน์ด๋ผ ๋ฐ์ดํฐ ๊ธธ์ด๊ฐ 4๋ก ๋๋ ๋จ์ด์ง๊ฑฐ๋ ๊ทธ๋ฃน ์์์ 1ยท2 ๋ชจ์๋ ์ ๋์ฌ์ผ ํ๋ค. ํ๋ ๋จ๋ ํํ(% 4 == 1)๋ base64๊ฐ ์ ์ด์ ๋ง๋ค ์ ์๋ ๊ธธ์ด๋ค. - ์ซ์๋
+,/๋ ์ ํ ์๋ค โ ์ค์ ๋ฐ์ดํฐ๋ฅผ base64๋ก ์ธ์ฝ๋ฉํ๋ค๋ฉด ์ซ์์ ๊ธฐํธ๊ฐ ๊ณจ๊ณ ๋ฃจ ์์ฌ ๋์จ๋ค. ๋ฌธ์์ ์ด ๋๋ฌธ์A-Z์ ์๋ฌธ์a,b,c์ ๋๋ง ์๋ ๊ฑด ๋ถ์์ฐ์ค๋ฝ๋ค.
๋ฐ๋ฉด base32๋ก ๋ณด๋ฉด ์ ๋ถ ๋ง์๋จ์ด์ง๋ค. 112์๋ 8๊ธ์ ๊ทธ๋ฃน 14๊ฐ, ํจ๋ฉ 3๊ฐ๋ base32์์ ์ ํจํ ๊ฐ์, ๋ฐ์ดํฐ 109์๋ฅผ 5๋นํธ์ฉ ํ๋ฉด ์ ํํ 68๋ฐ์ดํธ๊ฐ ๋์จ๋ค. ๊ทธ๋ฆฌ๊ณ DH{ + 64์๋ฆฌ hex + } = 68์, ์ฆ ํ๋๊ทธ ๋ณธ๋ฌธ์ด 64์๋ฆฌ hex(sha256์ผ๋ก ์ถ์ )๋ผ๋ ๊ฒ๊น์ง ๊ธธ์ด๊ฐ ๋ง๋๋ค.
โถ ์ฝ์ง: ์ด๋ฆ๊ฐ ํ๋๋ผ base64๋ก๋ง ์จ๋ฆํ๊ณ , ์นํ์ํธ๋ก ํฌ๋ํนํ๋ ค๋ค ํ๋ฐ์ง
์ฒ์์ ์ด๋ฆ ๊ทธ๋๋ก base64๋ก ๋ฐ์ด๋ถ์๋ค. ํ์ค ๊ทธ๋๋ก, = ๋ผ๊ณ ํจ๋ฉ ๋ค์, swapcase ํ ๋ฑ ๋ณ์ฃผ๋ฅผ ์ค๋ด๋ ์ ๋ถ ๊ฐ์ ์์ธ์์ ๋ฉ์ถ๋ค.
# sapjil_b64.py
import base64
ct = open("target.txt").read().strip()
for label, s in [("ํ์ค ๊ทธ๋๋ก", ct),
("'=' ๋ผ๊ณ ํจ๋ฉ ๋ค์", ct.rstrip('=') + '=' * (-len(ct.rstrip('=')) % 4)),
("swapcase ํ", ct.rstrip('=').swapcase())]:
try:
print(label, base64.b64decode(s))
except Exception as e:
print(label, "์คํจ:", e)
number of data characters (109) cannot be 1 more than a multiple of 4. ํ์ด์ฌ์ด ๋๋๊ณ "109๋ 4์ ๋ฐฐ์๋ณด๋ค 1 ๋ง์์ ์ ๋๋ค"๊ณ ์๋ ค์ค๋ค. ์ด ๋ฉ์์ง ์์ฒด๊ฐ ํํธ์๋๋ฐ, ์ฒ์์ ์ํ๋ฒณ์ด ์ปค์คํ
base64๊ฒ ๊ฑฐ๋ ํ๊ณ ์๋ฑํ ๋ฐฉํฅ์ผ๋ก ์๋ค.
๊ทธ๋ค์ ์ฝ์ง์ "์ปค์คํ
์ํ๋ฒณ base64๋ฅผ ์นํ์ํธ๋ก ๋ณต์ํ์"์๋ค. ์๋ ค์ง ํ๋ฌธ DH{์ ํ์ค base64๊ฐ REh7์ด๋, ์ํธ๋ฌธ ์ 4๊ธ์์ ๋์์์ผ Vigenรจre ํค(์ฃผ๊ธฐ 4)๋ฅผ ์ถ์ ํ๊ฑฐ๋, 6๋นํธ ์นํ ํ
์ด๋ธ์ ์๋ฎฌ๋ ์ดํฐ๋ ์ด๋๋ง์ผ๋ก ๋ง์ถฐ๋ณด๋ ค ํ๋ค.
# vig.py โ DH{ ์ ํ์ค b64 "REh7" ๋ฅผ ์ต์ปค๋ก ์ฃผ๊ธฐ4 Vigenรจre ํค ์ถ์ (์คํจ)
STD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
data = open("target.txt").read().strip().rstrip("=")
key = [(STD.find(data[i]) - STD.find("REh7"[i])) % 64 for i in range(4)]
print("key(period4 guess):", key) # ๋ณต์ ๊ฒฐ๊ณผ๊ฐ ์ ํ printable ํ์ง ์์์ ๋ถ ํ์๊ณ ์๋ค. ์ ์ด์ base64(6๋นํธ)๊ฐ ์๋๋ผ base32(5๋นํธ)์์ผ๋, 6๋นํธ ๋จ์๋ก ์๋ฌด๋ฆฌ ์นํ์ ๋ง์ถฐ๋ด์ผ ๋นํธ ๊ฒฝ๊ณ๋ถํฐ ์ด๊ธ๋๋ค. ๋ฌธ์ ์ค๋ช ์ด ํ๋ฆฐ ํํธ๋ฅผ ์ ๋๋ก ์ฝ๊ณ ๋์์ผ ๋ฐฉํฅ์ ํ์๋ค.
๊ฒฐ์ ์ ๋จ์ โ ์ค๋ช ์ด ํ๋ฆฐ 32๊ธ์ ์ํ๋ฒณ
๋ฌธ์ ์ค๋ช ๋งจ ์๋์ ํํธ๊ฐ ํ๋ ๋ถ์ด ์๋ค.
hint: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef์ธ์ด ๋ณด๋ฉด ์ ํํ 32๊ธ์๋ค. A๋ถํฐ Z๊น์ง 26๊ธ์์ a b c d e f 6๊ธ์๋ฅผ ๋ถ์ธ ๊ฒ. 32์นธ์ง๋ฆฌ ์ํ๋ฒณ = base32. ์ด๋ฆ์ likeb64("base64 ๊ฐ๋ค")์ง๋ง, ์ค์ ์ ์ฒด๋ ์ํ๋ฒณ๋ง ๊ฐ์ ๋ผ์ด base32์๋ ๊ฒ์ด๋ค. ํ์ค base32์ ๋๋ํ ๋์ผ๋ฉด ์ฐจ์ด๊ฐ ํ๋์ ๋ณด์ธ๋ค.
ํ์ค base32 : ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
likeb64 : ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef
^^^^^^ ๋ค 6์นธ๋ง 234567 โ abcdef์ 26์นธ A-Z๋ ๊ทธ๋๋ก๊ณ , ๊ฐ 26~31์ ํด๋นํ๋ ๋ง์ง๋ง 6์นธ๋ง ํ์ค์ 2 3 4 5 6 7์ a b c d e f๋ก ๋ฐ๊ฟจ๋ค. ์ํธ๋ฌธ์ ์ซ์๊ฐ ํ๋๋ ์๋ ์ด์ ๊ฐ ๋ฐ๋ก ์ด๊ฒ์ด๋ค. ์ซ์๊ฐ ๋์ฌ ์๋ฆฌ๋ฅผ ์๋ฌธ์๋ก ์์ฅํด "base64์ฒ๋ผ" ๋ณด์ด๊ฒ ๋ง๋ ๊ฒ.

base32 5๋นํธ ํจํน์ผ๋ก ์ต์ปค ๊ฒ์ฆ
๊ฐ์ค์ ์ธ์ ์ผ๋ฉด ์๋ ค์ง ํ๋ฌธ์ผ๋ก ๋ชป์ ๋ฐ๋๋ค. ํ๋๊ทธ๋ ํญ์ DH{๋ก ์์ํ๋, ์ด 3๋ฐ์ดํธ๋ฅผ ํ์ค base32๋ก ์ธ์ฝ๋ฉํด ์ํธ๋ฌธ์ ์์๊ณผ ๋ง์ถฐ๋ณด๋ฉด ๋๋ค. base32๊ฐ 5๋นํธ์ฉ ์ด๋ป๊ฒ ๋๋์ง ์์ผ๋ก ๋ฐ๋ผ๊ฐ ๋ดค๋ค.
# bits.py โ 'DH{' 3๋ฐ์ดํธ(24๋นํธ)๋ฅผ 5๋นํธ์ฉ ๋์ด base32 ์ธ๋ฑ์ค๋ก
CUSTOM = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef"
pt = b"DH{"
bits = "".join(f"{b:08b}" for b in pt) # 24๋นํธ
groups = [bits[i:i+5] for i in range(0, 25, 5)] # 5๋นํธ 5์นธ(๋ง์ง๋ง์ 1๋นํธ+0ํจ๋ฉ)
groups[-1] = groups[-1].ljust(5, "0")
idx = [int(g, 2) for g in groups]
print("๋นํธ(24) :", bits)
print("5๋นํธ ๊ทธ๋ฃน :", " ".join(groups))
print("โ ์ธ๋ฑ์ค :", idx) # [8, 17, 4, 7, 22]
print("โ likeb64 :", "".join(CUSTOM[i] for i in idx)) # IREHW
DH{(0x44 0x48 0x7b)๋ฅผ 24๋นํธ๋ก ์ด์ด๋ถ์ฌ 5๋นํธ์ฉ ๋์ผ๋ฉด ์ธ๋ฑ์ค [8, 17, 4, 7, 22], ์ํ๋ฒณ์ ๋์
ํ๋ฉด IREHW๊ฐ ๋์จ๋ค. ๊ทธ๋ฆฌ๊ณ ์ํธ๋ฌธ์ IREHWYJZโฆ๋ก ์์ํ๋ค. ์ 5๊ธ์๊ฐ ์ ํํ ์ผ์นํ๋ค. ์ด ์ํ๋ฒณ์ผ๋ก base32๋ฅผ ๋๋ฆฌ๋ฉด ๋๋ค๋ ํ์ฆ์ด๋ค. ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ ํ ๋ฒ ๋ ํ์ธํ๋ค.
# anchor.py
import base64
ct = open("target.txt").read().strip()
print("์ํธ๋ฌธ ์์ 5์ :", ct[:5]) # IREHW
print("base32('DH{') ํ์ค์ถ๋ ฅ :", base64.b32encode(b'DH{').decode()) # IREHW===
๋ณตํธ โ ์ํ๋ฒณ๋ง ๋๋๋ฆฌ๋ฉด ๋
์ด์ ํ ์ผ์ ๋จ์ํ๋ค. ์ปค์คํ
์ํ๋ฒณ โฆabcdef๋ฅผ ํ์ค base32 ์ํ๋ฒณ โฆ234567๋ก ๋ฌธ์ ์นํํ ๋ค, ๊ทธ๋ฅ ํ์ค base32 ๋์ฝ๋์ ๋ฃ์ผ๋ฉด ๋๋ค. ํ์ด์ฌ base64.b32decode๊ฐ ํ์ค ์ํ๋ฒณ์ ๊ฐ์ ํ๋ฏ๋ก, str.translate๋ก 6๊ธ์๋ง ๋๋๋ ค ์ฃผ๋ฉด ๊ทธ๋๋ก ๋จน๋๋ค.
# solve.py
import base64
raw = open("target.txt").read().strip()
CUSTOM = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef" # likeb64 ์ํ๋ฒณ
STDB32 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" # ํ์ค base32 ์ํ๋ฒณ
flag = base64.b32decode(raw.translate(str.maketrans(CUSTOM, STDB32)))
print("[+] FLAG:", flag.decode())
[+] FLAG: DH{a9a8a8fc724c76b1916bfe64e63b8d024a94c05cc196a60e473ddfba855c90f2}ํ๋๊ทธ ๋ณธ๋ฌธ์ 64์๋ฆฌ hex, DH{}๊น์ง ํฉ์ณ 68์๋ค. ์์ ์ ์ฐฐ์์ ๊ณ์ฐํ "๋ฐ์ดํฐ 109์ โ 68๋ฐ์ดํธ"์ ์ ํํ ๋ง์๋จ์ด์ง๋ค.
๋ค๋ฅธ ๋๊ตฌ๋ก ๊ต์ฐจ๊ฒ์ฆ
์นํ ๊ท์น์ด ์๋ ๋จ์ํด์ ํ์ด์ฌ ์์ด๋ ํ์ธ๋๋ค. ์ปค์คํ
์ํ๋ฒณ๊ณผ ํ์ค์ ์ฐจ์ด๋ ์๋ฌธ์ a-f๊ฐ 2-7์ ๋์ ํ๋ค๋ ๊ฒ๋ฟ์ด๋, tr๋ก ๊ทธ 6๊ธ์๋ง ๋๋๋ฆฐ ๋ค์ coreutils์ base32 -d์ ํ๋ ค๋ณด๋ด๋ฉด ๋๋ค. ๋๋ฌธ์ A-Z๋ ๋ ์ํ๋ฒณ์์ ๋์ผํด ๊ฑด๋๋ฆด ํ์๊ฐ ์๋ค.
cat target.txt | tr 'a-f' '234567' | base32 -d; echo
๋ธ๋ผ์ฐ์ ์์ ์ฆ๊ฒจ ์ฐ๋ CyberChef๋ก๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ค. From Base32 ์ฐ์ฐ์ ์ํ๋ฒณ์ ์ง์ ์ง์ ํ ์ ์์ด์, Alphabet ์นธ์ ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef=๋ฅผ ๊ทธ๋๋ก ๋ฃ๊ณ ์ํธ๋ฌธ์ Input์ ๋ถ์ด๋ฉด Output์ ํ๋๊ทธ๊ฐ ๋ฌ๋ค. ์ปค์คํ
์ํ๋ฒณ์ ์ ๋ ๋ณ๋ ์คํฌ๋ฆฝํธ ์์ด ๊ฒ์ฆํ๊ธฐ ํธํ๋ค.

๋ฐฉ์ด ๊ด์ โ ์ธ์ฝ๋ฉ์ ์ํธํ๊ฐ ์๋๋ค
์ด ๋ฌธ์ ๋ ์งง์ง๋ง ์์ ์ด ๋ถ๋ช ํ๋ค.
- ์ธ์ฝ๋ฉ(base32/base64)์ ๊ธฐ๋ฐ์ฑ์ ์ฃผ์ง ์๋๋ค. ์ํ๋ฒณ๋ง ์๋ฉด ๋๊ตฌ๋ ๋๋๋ฆฐ๋ค. ์ฌ๊ธฐ์ "์์ ๋ง์ ์ํ๋ฒณ"์ผ๋ก ์ด์ง ๋นํ์ด๋, ์ํ๋ฒณ 32~64๊ธ์๋ฅผ ๋ฌธ์ ์ค๋ช ์ ํ๋ฆฌ๊ฑฐ๋ ์๋ ค์ง ํ๋ฌธ ๋ช ๊ธ์๋ก ์ญ์ฐ๋๋ ์๊ฐ ๋ฌด์ฉ์ง๋ฌผ์ด๋ค. ๋ฏผ๊ฐ ๋ฐ์ดํฐ๋ฅผ base64/base32๋ก "๊ฐ๋ ค" ๋๋ ๊ฑด ๋ณด์์ด ์๋๋ผ ๊ทธ๋ฅ ๋์์์ด๋ค.
- ๊ฒ๋ณด๊ธฐ์ ์์ง ๋ง๊ณ ๊ตฌ์กฐ๋ฅผ ์ฝ์ด์ผ ํ๋ค. ์ด๋ฆ(
likeb64)๊ณผ ๊ฒ๋ชจ์(=ํจ๋ฉ, ๋์๋ฌธ์)๋ง ๋ณด๋ฉด base64๋ก ์ค์ธํ๊ธฐ ์ฝ๋ค. ๊ทธ๋ฌ๋ ํจ๋ฉ ๊ฐ์, ๋ฐ์ดํฐ ๊ธธ์ด์ ๋๋จธ์ง, ๋ฑ์ฅ ๋ฌธ์์ (์ซ์ยท๊ธฐํธ ์ ๋ฌด) ๊ฐ์ ์ ๋์ ์งํ๊ฐ ์ธ์ฝ๋ฉ์ ์ข ๋ฅ๋ฅผ ์ ํํ ๊ฐ๋ ค๋ธ๋ค. base64๋=์ต๋ 2๊ฐยท4๊ธ์ ๊ทธ๋ฃน, base32๋=6/4/3/1๊ฐยท8๊ธ์ ๊ทธ๋ฃน์ด๋ผ๋ ๊ท์น๋ง ๊ธฐ์ตํด๋ ์ค์ธ์ ํผํ๋ค. - ์๋ ค์ง ํ๋ฌธ์ ๊ฐ๋ ฅํ ๊ฒ์ฆ ์๋จ์ด๋ค. ํ๋๊ทธ ์ ๋์ฌ
DH{์ฒ๋ผ ํ์ ๋ ์กฐ๊ฐ์ด ์์ผ๋ฉด, ๊ฐ์ค๋ก ์ธ์ด ์ํ๋ฒณ/์ธ์ฝ๋ฉ์ด ๋ง๋์ง ๋จ ๋ช ๊ธ์๋ก ์ฆ์ ํ์ธํ ์ ์๋ค.
likeb64๋ผ๋ ์ด๋ฆ์ ๋์๊ณ , ์ ์ฒด๋ ์ํ๋ฒณ 6์นธ๋ง ๋ฐ๊พผ base32์๋ค. ์ด๋ฆ๊ฐ์ ๋๋ ค๊ฐ์ง ์๊ณ ๋ฌธ์์ด์ ์๊น์๋ฅผ ์ธ์ด ๋ณธ ๊ฒ์ด ํ์ด์ ์ ๋ถ์๋ค.
Comments
๋๊ธ
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํด์. (๋ค์ด๋ฒ ยท ๊ตฌ๊ธ ๊ณ์ )
๋๊ธ ๋ถ๋ฌ์ค๋ ์คโฆ