2010-04-26 6 views
3

인코딩 된 PDF 파일을 정기적으로받습니다. 인코딩은 다음과 같이 작동알고리즘이 필요합니다.

  • PDF 파일 모두를 선택하고 Acrobat Reader를 통해
  • 을 테스트를 복사하여 텍스트 편집기에 붙여
  • Acrobat Reader를 제대로 표시 할 수
  • 콘텐츠 것을 보여줍니다 그래서

를 인코딩, 예입니다

13579 -> 3579; 
hello -> jgnnq 
,

기본적으로 ASCII 문자의 오프셋 (어쩌면 스왑)입니다.

몇 가지 샘플에만 액세스 할 수있는 경우 어떻게 오프셋을 자동으로 찾을 수 있습니까? 인코딩 오프셋이 변경되었는지는 확신 할 수 없습니다. 내가 아는 전부는 일반적으로 (항상은 아닐지라도) 어떤 텍스트가 나타날 것입니다. "이름 :", "요약 :", "합계 :", PDF 내.

감사합니다.

편집 : 의견에 감사드립니다. 나는 작은 질문에 질문을 파괴하려고 것 :

제 1 부 : How to detect identical part(s) inside string?

+0

"13579 -> 3579;"를 수정했습니다. 당신이 보는 것이 당신이 의미하는 바램이기를 바랍니다. – zaf

+0

거기에는 꽤 많은 수의 무료 소프트웨어가 있습니다. 그런 프로그램을 찾으십니까? 아니면 직접 작성하려고합니까? –

+0

@zaf 나는 '3579;가 정확하다고 믿습니다. '13579;가 아님,'9 '+ 2는'; ' 실제로 – YOU

답변

5

당신은 그것을-무력 할 필요가있다. 그 패턴 (2 개 문자 코드입니다) 당신의 예에서와 같이 두 문자 코드

h i j 
e f g 
l m n 
l m n 
o p q 

1 2 3 
3 4 5 
5 6 7 
7 8 9 
9 : ; 

쉽게 한 과학적 단어에 대해 확인하기 위해 다음과 같이 구현할 수 같은 간단한 경우

>>> text='jgnnq' 
>>> knowns=['hello', '13579'] 
>>> 
>>> for i in range(-5,+5): #check -5 to +5 char code range 
...  rot=''.join(chr(ord(j)+i) for j in text) 
...  for x in knowns: 
...   if x in rot: 
...    print rot 
... 
hello 
+0

+1 : 무차별 공격은 제한된 암호화 방법과 유아용 침대가있는 경우 전적으로 적합합니다. 이것은 수수께끼가 아닙니다. 샘플 부족으로 문제가 될 수 있지만 한 번 암호화를 해체하면 나머지는 쉽게 떨어집니다. –

1

흠, 거친 것.

제가 제안 할 수있는 유일한 것은 일부 대체 암호 알고리즘과 함께 사전을 사용하여 일부 텍스트의 해독에 도움이 될 수 있다는 것입니다.

그러나 설명하는 시나리오로 모든 것을 디코딩 할 솔루션을 볼 수 없습니다.

몇 가지 샘플 입력을 붙여 넣기 전에 왜 디코딩을 할 수 있습니까?

+0

@zaf, 미안 개인 데이터가 포함되어 있기 때문에 여기에 실제 데이터를 붙여 넣을 수 없습니다. 인코딩이 ASCII 추가 또는 ASCII 문자 스와핑을 사용하고 있음을 확신합니다. – ohho

+0

확인. 당신은 가지고있는 간단한 디코딩 아이디어로 사전 아이디어를 테스트하고 더 많은 정보를 추출 할 수 있는지 확인해야합니다. – zaf

0

Acrobat Reader 이외의 PDF 리더에서 인코딩 된 파일이 올바르게 열립니까? 그렇다면 PDF 라이브러리 (예 : PDF Clown)를 사용하여 프로그래밍 방식으로 필요한 텍스트를 추출 할 수 있습니다.

+0

필자는 pdfminer (python pdf 도구) – ohho

1

예를 들어 많은 예제가있을 때만 가능합니다 (모든 조합을 얻거나 시나리오의 선형 값 종속성 또는 아이디어를 얻을 수 있음).

이 질문도 : How would I reverse engineer a cryptographic algorithm? 몇 가지 조언이 있습니다.

3

PDF에 기호 (예 : 수학 또는 교정) 또는 자연어 텍스트 (영어, 프랑스어 등)가 포함될 예정입니까?

후자의 경우, 거리 표를 사용하려면 글자 (이 그래프, 삼자 및 작은 사전 단어)에 빈도 차트를 사용할 수 있습니다. 아마도 이들 중 몇 가지가 온라인에 있다고 생각합니다. Here's 시작. 더 구체적으로는 letter frequencies입니다.

그렇다면 이것이 시저스 시프트라고 확신한다면 처음 1000 자 정도를 가져 와서 (내가 추측 할 수있는) 최대 127 개까지 증가시킬 수 있습니다. 결과 텍스트를 가져 와서 위에서 발견 한 평균과 일치하는 빈도를 계산하십시오. Here에 관한 정보입니다.

위키 피 디아의 링크 된 문자 빈도 페이지는 글자 만 표시하므로 계산시 제외 시키거나 더 나은 차트를 찾을 수 있습니다. 대소 문자에 관계없이 문자를 모두 처리하려면 결과 텍스트 전체를 소문자 또는 대문자 (사용자 환경 설정)로 변환 할 수도 있습니다.

편집 -이 경우

을 교환 문자에 대한 코멘트를 보았다,이 시간 비록 당신은 아마 추가 분석을 할 다니면서 소리를 나타내는 두 글자 차트를 갖고 싶어합니다, 아직 자동으로 분류 될 수있는 교체를 암호,이다 . 이 방법은 문자 분석 측면에서 평균 언어보다 정확한 단어를 "대체로"대체 할 수 있기 때문에 유용합니다. 그러나이 그래프의 빈도를 비교하면 배제 할 수 있습니다.

또한 문자 이동을 제안한 다음 주파수가 평균 언어 빈도와 얼마나 가까운 지 확인했습니다. 실제로는 암호문의 빈도를 먼저 계산 한 다음 좋은 값으로 정렬 해보십시오. 어느 쪽이 더 좋은지 잘 모르겠습니다.

+0

에 의해 Acrobat Reader와 동일한 텍스트 (인코딩 된 형식)를 추출 할 수 있습니다. 필자가 얻을 수있는 샘플은 읽을 수있는 ASCII입니다 (즉, Acrobat에서 읽을 수있는 모든 문자는 다른 사람 - 읽을 수있는 ASCII 문자) – ohho

+0

오, 그 때 완벽합니다. 그렇다면 이동 길이에 대한 상한이 있습니다 (확신 할 수는 없지만 128에서 0으로 줄 바꿈하여 128-255를 건너 뛸 수 있습니까?). 내가 집에 있었다면 대학에서 내 오래된 Matlab 프로그램을 열어서 (아직 내가 가지고있는 것 같음) 당신에게 계산을 보여줄 수 있었다. 나는 암호 과정의 일부로 요청한 프로그램을 만들었습니다. – Phil

+0

예, 해결하려고 시도했을 때, 저는 대학 과제를 수행하는 느낌이 들었습니다 ;-) – ohho

관련 문제