2011-04-12 5 views
3

나는 다음과 같은 추적 요청이 있습니다트래커 발표 요청에서 info_hash 정보를 어떻게 디코딩합니까?

"info_hash=%92%c345%c0%28%15%e4rr%b1y%17%b7%cbs%0a%ef%9a%fc&peer_id=-UT2210-%2abP%b2%c23~NaN7-%7c%0f%1f&port=56541&uploaded=0&downloaded=0&left=461680&corrupt=0&key=6AD19369&event=started&numwant=200&compact=1&no_peer_id=1" 

을 나는 자바 스크립트의 info_hashpeer_id 필드를 디코딩하고 싶습니다. unescape(), decodeURI()decodeURIComponent() 함수를 시도했지만 예상 한 결과를 반환하지 않았습니다.

+0

모든 % nn 세 쌍은 16 진수 표현이며 다른 모든 것은 인코딩되지 않습니다. 이진 데이터로 무엇을하고 싶습니까? –

+0

나는 이것이 더 나은 표현을 얻을 수 있다고 생각했다. 그 목적은 추적기를 만드는 것이고 나는 데이터베이스에 들어가야하는 정보에 대해 혼란스러워했습니다. – George

+0

가장 좋은 표현은 그 중 하나이며, 디코딩하지 말아야한다는 것이 밝혀졌습니다.나는 그것을 그대로 사용하게 될 것이다. – George

답변

4

트래커에 HTTP GET 요청의 정보 해시 존재 디코딩 할 수 있습니다

그 다음이 개 문자는 원래 40 문자 SHA-1의 일부인 '%'문자가 있다면 해시시. 다음

그래서, 부호화 info_hash을 깰 수

% 92 % C3 4 5 % C0의 % 28 % 15 %의 E4의 RR %의 B1 및 y % 17 % B7 %의 CB를 S % 0A % EF % 9A % fc

'%'기호가 붙은 모든 2 개의 char 그룹은 원래 해시에 속합니다.

이제 나머지 문자입니다. 우리는 그들에 해당하는 Hex 값을 찾아야합니다. 참조 용으로 asciitable을 사용할 수 있습니다.

예를 들어, 기본 10의 4는 16 진수입니다. 토런트 파일> SHA-1 해시 -

92c33435c02815e47272b17917b7cb730aef9afc :

우리가 함께 얻을 이런 식으로 모든 결합.

peer_id는 클라이언트 이름과 버전에 대한 정보를 제공합니다. 이 경우 :

-UT2210- % 2abP % B2 % C23 ~ 7C NaN7- % % % 0F 1F

이 Azureus의 형식이다.

UT는 μTorrent에 해당하며 2210은 우리에게 버전을 제공합니다.

디코딩 프로세스는 Perl 스크립트를 사용하여 쉽게 자동화 할 수 있습니다.

+0

그레이트 설명 !!! 정말 고맙습니다! – Rugal

0

'디코딩'하는 방법은 '인코딩 된'방식에 따라 다릅니다.

인코딩 방법을 선택하는 경우 :

이스케이프() 인코딩되지 않습니다 @*/+

에 encodeURI()를 인코딩하지 것이다 [email protected]#$&*()=:/,;?+'

에 encodeURIComponent()를 인코딩하지 것이다 ~!*()'

당신은 이중 인코딩의 어떤 형태를보고있을 것입니다. 다음과 같이

+0

이것이 주된 문제입니다. 어떻게 인코딩했는지 모르므로 디코딩 할 수 없습니다. – George

관련 문제