2011-03-30 2 views
3

암호화에 사용되는 키 찾기 :나는이 의사 코드가

for i = 0 ... P.length 
    C[i] = P[i] XOR K[i%K]; 
    K[i%k] = (K[i%k] +P[i]) mod 64; 
P는 일반 텍스트가

는, C는 암호화 된 텍스트입니다, K는 키이고 k는 키 K (음의 길이를 나타내며, 그 뚜껑은 k와 K가 다르다).

이것은 숙제이지만 내 것이 아니기 때문에 나는 항상 암호화 주제를 좋아했기 때문에 그것을 해결하는 방법에 대해 궁금해하고 있습니다.

여기서 주어진 임무는 C가 주어졌고 키에 대해 다음을 알고있는 경우 일반 텍스트 P를 추론하는 것입니다.

키는 this TWL Word List에서 임의의 단어로 선택됩니다. 선택한 단어의 끝에 0에서 999 사이의 난수가 추가됩니다. 확률이 0.5이면 첫 번째 문자가 대문자가됩니다. 소문자 'o'는 각 'o'에 대해 확률 0.5로 '0'(제로)로 변환됩니다. 마찬가지로 소문자 'l'(ell)은 'e'에서 '3'으로, '5'에서 't', '7'에서 모두 '1'로 변환됩니다. 확률 0.5.

프로그램은 10 초 미만의 메모리를 소비해야하며 1GB 미만의 메모리를 사용해야합니다. 이 문제가 주어진 수업에는 미드 레인지 랩톱이 포함되어 있으므로 10 초를 심각하게 생각할 것입니다. (숙제를 실제로 풀지 않았으므로 시간 제한이 없습니다.)

이 문제에 접근하는 좋은 방법은 무엇입니까? 무차별 한 힘이 여기에서 사용되는 것처럼 보이지 않기 때문입니다.

P.IF "%"는 모듈 단위입니다 ... 그러면 "mod"는 어떻게합니까?

편집 : 일반 텍스트 P는 위키 백과에서 가져온 임의의 텍스트가있는 문자 또는 숫자가 아닌 모든 문자는 밖으로 제거됩니다된다
(공백 포함) I 해요 각 문자에 대해 일치되는 것을 거의 확실 [a-zA-Z0-9]와 일치하지 않으면 제거됩니다.

편집 2 :
This .pdf 것은 아마 분명히 도움이 될 것입니다. 여기서 P 출력과 Key의 예를 찾을 수 있습니다.

+0

"mod"와 "%"는 같은 것을 의미한다고 가정합니다. 교수가 간단하게 유지하려고했습니다. – sarnold

+0

모드 64가 이상합니다. 그리고 내가 너를 정확하게 이해한다면 열쇠 길이는 확실히 5가 될거야? (목록에는 단 4 자의 단어가 있고 번호를 추가합니다). 키와 평문은 ASCII로 인코딩 되었습니까? 아니면 무엇입니까? –

+0

두 번째 생각에서 64는 OP가 대문자 AZ를 0-25, az를 26-61로 인코딩하고 숫자에 마지막 2 자 (base64 스타일)로 2자를 더한 것, 또는 이 암호문은이 방법으로 인코딩 될 수도 있습니다. 명확히하십시오. –

답변

1

저는이 문제를 해결해야만하는 학생 중 한 명이었으며 대답을 찾았습니다. 점수는 0.934로 1 차 시도에는 좋았습니다. 어쨌든, 여기에 코드를 게시하지 않을 것입니다. 왜냐하면 만약 당신이 정말로 당신이 그것을 위해 싸워야 만하는 것들을 해결하고 싶다면 나는 믿습니다.하지만 나는 그것을 해결하는 방법에 대한 몇 가지 팁을 줄 수 있습니다. 이 문제를 해결하는 동안 한 가지주의 할 점은 키의 키 길이가 텍스트의 암호 해독에 사용하려는 키의 키 길이와 같을 때 나타나는 특성이 있다는 것입니다. ""및 ""은 "당신이 영어 텍스트에서 찾을 수있는 가장 일반적인 단어를 의미합니다. 열쇠의 길이를 이미 알고 있다면 그것을 찾을 수 있습니다. 키 생성 규칙이 있다는 것을 기억하십시오. 규칙을 사용하면 TWL WORD LIST를 사용할 필요조차 없습니다. 조금 생각해 보면 전체 문제는 단지 곱셈과 대치 문제 일뿐입니다 (최소한 내 접근 방식). 다른 질문이 있으면이 팁이이 프로그램을 수행해야하는 사람을 도울 수 있기를 바랍니다.) 내가 도와 드리겠습니다.

관련 문제