벤코드
BencodeBencode(Ben-code와 같이 발음됨)는 P2P 파일 공유 시스템 BitTorrent가 느슨하게 구조화된 데이터를 저장하고 전송하기 위해 사용하는 인코딩이다.[1]
다음 네 가지 유형의 값을 지원한다.
- 바이트 문자열,
- 정수,
- 목록, 및
- 사전(관련 배열).
벤코딩은 토렌트 파일에서 가장 일반적으로 사용되며, 따라서 비트토렌트 규격의 일부분이다.이 메타데이터 파일은 단순히 벤코딩된 사전이다.
순수한 바이너리 인코딩보다 효율성이 떨어지지만,[citation needed] 벤코딩은 단순하고 (숫자가 십진법 표기법으로 텍스트로 인코딩되기 때문에) 엔디안성의 영향을 받지 않으며, 이는 비트토렌트와 같은 교차 플랫폼 어플리케이션에 중요하다.또한 응용 프로그램이 예기치 않은 사전 키를 무시하여 비호환성을 만들지 않고 새 사전 키를 추가할 수 있는 한 상당히 유연하다.
인코딩 알고리즘
Bencode는 ASCII 문자를 구분자 및 숫자로 사용한다.
- 정수는 base 10 ASCIIe로 인코딩된 i<integer>로 인코딩된다.선행 0은 허용되지 않는다(숫자 0은 여전히 "0"으로 표시된다).음수 값은 하이픈 미니어스로 숫자에 접두사를 붙여서 인코딩된다.따라서 42라는 숫자는 다음과 같이 암호화될 것이다.
i42e, 0 asi0e, 및 -42 asi-42e. 마이너스 0은 허용되지 않는다. - 바이트 문자열(바이트 시퀀스, 반드시 문자일 필요는 없음)은 <길이>:<내용>로 인코딩된다.길이는 정수처럼 베이스 10으로 인코딩되지만 음이 아닌(0은 허용됨)이어야 하며, 내용은 문자열을 구성하는 바이트에 불과하다."스팸" 문자열은 다음과 같이 인코딩됨
4:spam. 규격은 ASCII 집합 외부의 문자 인코딩을 다루지 않는다. 이를 완화하기 위해 일부 BitTorrent 애플리케이션은 다양한 비표준 방식으로 인코딩(가장 일반적으로 UTF-8)을 명시적으로 전달한다.이는 넷스트링이 바이트 시퀀스 뒤에 콤마 접미사를 추가한다는 점을 제외하면 넷스트링의 작동 방식과 동일하다. - 값 목록은 l<contents>e로 인코딩된다.내용은 순서대로 목록의 벤코딩된 요소로 구성된다."스팸" 문자열과 42번으로 구성된 목록은 다음과 같이 인코딩된다.
l4:spami42ee. 요소들 사이에 구분자가 없다는 것을 주목하라, 그리고 첫 번째 문자는 숫자 '1'이 아니라 문자 'l'이다. - 사전은 d.contentse로 인코딩되어 있다.사전의 요소들은 각 키와 바로 뒤에 그 값이 따라 인코딩된다.모든 키는 바이트 문자열이어야 하며 사전순으로 표시되어야 한다.값 42와 "스팸"을 각각 키 "foo"와 "bar"(즉, )와 연결하는 사전은 다음과 같이 인코딩된다.
d3:bar4:spam3:fooi42ee.
목록과 사전에 저장할 수 있는 값의 종류에는 제한이 없으며, 다른 목록과 사전을 포함할 수 있다(일반적으로 할 수 있음).이를 통해 임의로 복잡한 데이터 구조를 인코딩할 수 있다.
특징 & 단점
Bencode는 매우 특수한 종류의 바이너리 부호화로서 몇 가지 독특한 특성을 가지고 있다.
- 각각의 가능한 (복잡한) 값에 대해, 오직 하나의 유효한 벤코딩만 있다. 즉, 값과 그 인코딩 사이에 편차가 있다.이는 응용 프로그램이 인코딩된 형식을 비교하여 벤코딩된 값을 비교할 수 있다는 장점이 있어 값을 디코딩할 필요가 없다.
- 많은 BE 코드 그룹을 수동으로 디코딩할 수 있다.벤코딩된 값은 종종 이진 데이터를 포함하기 때문에 디코딩은 매우 복잡해질 수 있다.Bencode는 사람이 읽을 수 있는 인코딩 형식으로 간주되지 않는다.
- Bencoding은 JSON, YAML과 같은 데이터 언어와 유사한 목적을 가지고 있어 복잡하지만 느슨하게 구조화된 데이터를 플랫폼 독립적으로 저장할 수 있다.
그러나 이러한 고유성은 다음과 같은 몇 가지 문제를 일으킬 수 있다.
- 벤코드 편집자는 거의[2] 없다.
- 벤코딩된 파일에는 이진 데이터가 포함되어 있고, 바이너리 문자열이 일반적으로 저장되는 방식과 관련된 복잡성 때문에 텍스트 편집기에서 벤코드 파일을 편집하는 것은 안전하지 않은 경우가 많다.
참고 항목
참조
- ^ BitTorrent Protocol Specification 2019-07-26을 웨이백 머신에 보관.BitTorrent.org.2018년 10월 8일 검색됨
- ^ "BEncode Editor". μTorrent Community Forums. Archived from the original on 24 October 2014. Retrieved 24 October 2014.
외부 링크
- 벤코딩 사양
- File_Bittorrent2 - 다른 PHP Bencode/decode 구현
- Python에서 독립 실행형 패키지로 BitTorrent 원래 구현
- BENcode BEncoded 파일의 시각적 편집기
- BENcode 파일의 Torrent File Editor 크로스 플랫폼 GUI 편집기
- bencode-tools - Bencode 데이터를 조작하기 위한 C 라이브러리 및 Python에서 Bencode 메시지를 위한 검증 도구와 같은 XML 스키마
- 벤투-엘리시르의 벤코드 라이브러리.
- Beecoder - java.io을 사용하여 Java에서 "B-encode" 데이터 형식을 삭제/제거하는 파일 스트림 분석기.* 스트림 API.
- 자바에서 벤코드 구문 분석
- 스칼라의 벤코드 도서관
- Bencode 구문 분석(C)
- CPAN에는 수많은 Perl 구현이 있다.