🔐 ROT13 인코더 및 디코더
자체 가역적인 ROT13 암호를 사용하여 텍스트 변환 - 스포일러 숨기기 및 기본 텍스트 난독화에 적합
🎯 ROT13 알파벳 매핑
ROT13은 각 문자를 13자리 뒤의 문자로 바꿉니다. 알파벳이 26개이므로 ROT13을 두 번 적용하면 원래 텍스트로 돌아옵니다.
🏛️ ROT13이란?
ROT13("13자리 회전")은 고정된 13자리 이동을 사용하는 시저 암호의 특별한 경우입니다. 온라인 포럼이나 뉴스그룹에서 스포일러, 퍼즐 해답, 농담의 핵심 내용을 숨기는 데 널리 사용됩니다.
단순 치환 암호
각 문자는 알파벳에서 13자리 떨어진 다른 문자로 대체됩니다.
자체 가역적
ROT13을 두 번 적용하여 원본 텍스트를 되돌릴 수 있습니다 - 인코딩과 디코딩이 동일한 작업입니다.
대소문자 유지
대문자는 대문자로, 소문자는 소문자로 유지됩니다.
넓은 지원 범위
빠른 난독화를 위해 플랫폼, 포럼, 텍스트 편집기에서 사용됩니다.
⚙️ 작동 원리
각 문자는 알파벳에서 13자리 앞의 문자로 대체됩니다. 끝에 도달하면 처음으로 돌아갑니다:
- A ↔ N, B ↔ O, C ↔ P, 등.
- 숫자와 기호는 변경되지 않습니다 (옵션 활성화 시 제외)
- 수학 공식: (x + 13) mod 26
- 인코딩과 디코딩 과정 동일
🔐 보안 및 사용법
ROT13은 암호학적 보안을 제공하지 않으며 쉽게 해독될 수 있습니다. 하지만 다음과 같은 용도에 적합합니다: and is trivially broken. However, it's perfect for:
🎬 스포일러 숨기기
포럼에서 영화, 책, 게임 스포일러를 실수로 읽는 것을 방지합니다.
📧 이메일 난독화
웹사이트에서 스팸봇으로부터 이메일 주소를 숨깁니다.
🎓 암호학 교육
학생들에게 기본적인 암호화 개념을 소개합니다.
🎮 퍼즐 및 게임
간단한 단어 퍼즐과 수수께끼를 만듭니다.
❓ 자주 묻는 질문
💻 다양한 프로그래밍 언어의 ROT13
Python
import codecs
# Method 1: Using codecs
text = "Hello World"
encoded = codecs.encode(text, 'rot13')
print(encoded) # Output: Uryyb Jbeyq
# Method 2: Manual implementation
def rot13(text):
result = []
for char in text:
if char.isalpha():
offset = 65 if char.isupper() else 97
result.append(chr((ord(char) - offset + 13) % 26 + offset))
else:
result.append(char)
return ''.join(result)
print(rot13("Hello World")) # Output: Uryyb Jbeyq
JavaScript
function rot13(str) {
return str.replace(/[a-zA-Z]/g, function(char) {
const code = char.charCodeAt(0);
const offset = code >= 65 && code <= 90 ? 65 : 97;
return String.fromCharCode((code - offset + 13) % 26 + offset);
});
}
console.log(rot13("Hello World")); // Output: Uryyb Jbeyq
PHP
<?php
// Method 1: Using str_rot13
$text = "Hello World";
$encoded = str_rot13($text);
echo $encoded; // Output: Uryyb Jbeyq
// Method 2: Manual implementation
function rot13_manual($str) {
$result = '';
for ($i = 0; $i < strlen($str); $i++) {
$char = $str[$i];
if (ctype_alpha($char)) {
$offset = ord(ctype_upper($char) ? 'A' : 'a');
$result .= chr((ord($char) - $offset + 13) % 26 + $offset);
} else {
$result .= $char;
}
}
return $result;
}
?>
Java
public class ROT13 {
public static String encode(String text) {
StringBuilder result = new StringBuilder();
for (char c : text.toCharArray()) {
if (Character.isLetter(c)) {
char offset = Character.isUpperCase(c) ? 'A' : 'a';
result.append((char) ((c - offset + 13) % 26 + offset));
} else {
result.append(c);
}
}
return result.toString();
}
public static void main(String[] args) {
System.out.println(encode("Hello World"));
// Output: Uryyb Jbeyq
}
}
C++
#include <iostream>
#include <string>
#include <cctype>
std::string rot13(const std::string& text) {
std::string result;
for (char c : text) {
if (std::isalpha(c)) {
char offset = std::isupper(c) ? 'A' : 'a';
result += (c - offset + 13) % 26 + offset;
} else {
result += c;
}
}
return result;
}
int main() {
std::cout << rot13("Hello World") << std::endl;
// Output: Uryyb Jbeyq
return 0;
}
리눅스/유닉스 커맨드 라인
# Using tr command
echo "Hello World" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
# Output: Uryyb Jbeyq
# Decode (same command)
echo "Uryyb Jbeyq" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
# Output: Hello World
# Process a file
cat input.txt | tr 'A-Za-z' 'N-ZA-Mn-za-m' > output.txt
📚 역사적 배경
ROT13은 1980년대 유즈넷에서 잠재적으로 불쾌감을 줄 수 있는 콘텐츠를 숨기는 방법으로 인기를 얻었습니다. 이는 "답을 거꾸로 인쇄하는 유즈넷 방식"으로 묘사됩니다.
- 초기 인터넷 문화에서 유래
- 현대 포럼과 토론 게시판에서 여전히 사용됨
- 많은 텍스트 편집기(Vim 등)에 내장됨
- 유닉스 유틸리티의 표준 기능