간단히하기 위해 시저 (또는 교대) 암호를 풀려고한다고 가정합니다. 이와 관련된 원칙은 다른 암호에도 적용되어야합니다.
가장 일반적인 문자를 찾고 싶다고 나타 냈습니다. 이 편지는 다른 편지가 될 수 있기 때문에 모든 경우에 도움이되지는 않습니다. 그러나 이것을 사용하여 편지 빈도 공격을 할 수 있습니다 ... 이것은 매우 긴 문자열의 경우에만 효과적입니다 ...
아마 이러한 문제를 해결하는 가장 쉬운 방법은 솔루션을 강제로 사용하는 것입니다. 극소수의 솔루션 만 있기 때문에 무차별 대입은 매우 효과적 일 수 있습니다. 알파벳에는 26 자의 글자가 있으므로 0-25자를 바꿀 수 있습니다. 즉, 확인할 수있는 문자열은 25 개뿐입니다.
이러한 문자열을 찾는 것은 비교적 쉽습니다. 1-25 범위의 루프를 사용하십시오. 이제 문자열의 각 문자를 숫자 0-25 [A = 0, B = 1 ... Z = 25]로 변환하고 시프트 [1-25]를 추가하십시오. (char_value + shift) % 26
은 새로운 캐릭터 가치를 제공합니다. (ASCII 문자 값을 사용할 수도 있지만 이해를 위해 사용합니다.
어느 문자열이 일 가능성이 가장 높습니까? 가장 올바른 방법은 무엇입니까? 이 단어는 일반적인 단어 사전을 사용하는 것입니다.이 공격 유형에 대한 자세한 내용은 http://en.wikipedia.org/wiki/Known-plaintext_attack입니다. 사전을 사용하면 알려진 단어 수가 가장 많은 문자열을 찾습니다. 기회는이 솔루션이 될 것입니다.
이 모든 경우에 작동합니다.
의 경우 가장 일반적인 문자가 E
으로 바뀌는 문제를보고 싶으면 문제가 훨씬 간단 해집니다. 그러나 실제 예제에서 문자열의 가장 일반적인 문자는 반드시 E
일 필요는 없으므로이 전략은 최적이 아닙니다.
문자열을 반복하면서 가장 일반적인 문자를 찾고 각 문자의 발생 횟수를 기록하십시오. 당신은 여러 가지 방법으로 이것을 할 수 있습니다. 당신은 int,지도, 또는 꽤 많은 것들을 사용할 수 있습니다 ...
여기에서이 글자에서 E
으로의 이동 크기를 결정하십시오. 예를 들어, S
이 가장 일반적이면 시프트는 12입니다. E의 값은 4입니다. S의 값은 18입니다. 시프트는 (26-18) +4입니다. 이는 나머지 함수, 즉 ((26-o)+4) % 26
을 사용하여 가능한 모든 문자로 변환 할 수 있습니다. o
이 가장 빈번한 문자의 값입니다. 따라서 가장 빈번한 문자가 A = 0, 26 + 4 % 25 = 4이면 올바른 이동입니다.
이제 위에서 설명한대로 모든 문자를 이동할 수 있습니다.
여기에 어떤 종류의 암호가 사용됩니까? 간단한 교대 암호 또는 더 복잡한 무엇인가? – DinoOcch
단순 암호 시프트 문자를 앞으로 옮깁니다. –
이미 수행 한 작업을 추가 할 수 있지만 metter가 없다고 느낍니다. –