Cifra sau practica ruperii pentru a nu uita

În cartea "Puzzle-uri pentru un hacker" în primul capitol există o sarcină în care cititorul este încurajat să decodeze textul criptat cu un xor simplu. Cheia nu este cunoscută.







Ca text, se propune un manifest "Conștiința unui hacker.txt".

Mai întâi trebuie să determinăm lungimea cheii.

  • modificați ciclic textul în i (de la 1 la len (text) / 2) caractere spre dreapta
  • Pentru fiecare iterație, comparați numărul de coincidențe ale simbolurilor originale (nedegradate) și noi texte)
  • offset i la care numărul de potriviri este maxim și este lungimea necesară a cheii

Apropo, de ce len (text) / 2. Este mai corect să verificați toate compensările până la len (text) - 1. Dar experimentele au arătat că procentul coincidențelor pentru schimbarea i și n-i va fi același pe textele mari. Și cine va face cheile mai mult de jumătate din text?







În practică, se arată astfel:

  • Avem textul cipher "abcdea"
  • rotiți-l cu i = 1 caractere
  • Avem "aabcde"
  • Căutăm numărul de potriviri de caractere în liniile "abcdea" și "aabcde"
  • Avem o coincidență în caracterul zero.
  • Procentajul coincidențelor pentru schimbarea 1 este
16,7%
  • Repetăm ​​pentru toate schimbările și alegem cel cu cel mai mare procent
  • Se răcește. Lungimea cheii este cunoscută de noi.

    Acum trebuie să găsim cheia în sine.

    Pentru a face acest lucru, procedați după cum urmează:

    • Împărțiți textul în grupuri de simboluri
    • Numărul de grupuri este egal cu lungimea cheii
    • Fiecare grup cuprinde simboluri care sunt codificate de simbolul cheie al i-lea
    • În fiecare grup, tratăm simbolurile cu cel mai frecvent simbol al alfabetului (pentru engleza, acesta este un spațiu)
    • Se calculează frecvențele fiecărui simbol primit în cadrul grupului
    • Selectăm elementul cu cea mai mare frecvență de apariție ca litera i a cheii






    Trimiteți-le prietenilor: