Cserélje el a törés gyakorlatát, hogy ne felejtse el

A "Rejtvények egy hacker számára" című könyvben az első fejezetben olyan feladat van, amelyben az olvasót arra ösztönzik, hogy dekódolja az egyszerű xor kódolt szöveget. A kulcs nem ismert.

Szövegként egy "Hacker.txt" lelkiismeretét javasolják.

Először meg kell határoznunk a kulcs hosszát.

  • ciklikusan tolja át a szöveget i-re (1-től len (szöveg) / 2-ig) jobbra
  • Minden egyes iterációnál összehasonlítjuk az eredeti (nem elmozdított) és új szövegek szimbólumainak egybeesésének számát,
  • offset i, ahol a mérkőzések száma a maximális és a szükséges hosszúságú kulcs

És mellesleg, miért len ​​(szöveg) / 2. Helyesebb lenne minden eltolást len ​​(text) - 1-ig ellenőrizni, de a kísérletek azt mutatták, hogy az i és n-i műszakos véletlenek százaléka azonos lesz a nagy szövegek esetében. És ki fogja felvenni a kulcsokat a szöveg felénél?

A gyakorlatban így néz ki:

  • Megvan az "abcdea"
  • Forgassa el i = 1 karakterrel
  • Kapunk "aabcde"
  • A "abcdea" és a "aabcde" sorokban szereplő karakterek mérkőzéseinek számát keressük
  • Van egy egybeesés a nulla karakterben.
  • Az 1-es műszakos véletlenek százalékos aránya
16,7%
  • Ismételjük az összes műszakot, és válasszuk ki a legmagasabb százalékos értéket
  • Cool. A kulcs hossza ismert minket.

    Most meg kell találnunk a kulcsot.

    Ehhez az alábbiak szerint járjon el:

    • Szétválassza a szöveget szimbólumcsoportokba
    • A csoportok száma megegyezik a kulcs hosszúságával
    • Mindegyik csoport olyan szimbólumokat tartalmaz, amelyeket az i-es kulcsszimbólum kódol
    • Minden csoportban az ábécé leggyakoribb szimbólumát veszik fel (angolul ez egy szóköz)
    • Minden egyes vett szimbólum frekvenciáját kiszámítjuk a csoport között
    • A legfontosabb előfordulási gyakoriságot a kulcs i-edik betűjévé választjuk