abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 14:44 | Nová verze

Český překladatelský tým LibreOffice vydává příručku LibreOffice Writer verze 6.4. Kniha představuje některé hlavní funkce aplikace LibreOffice Writer:… více »

Zdeněk Crhonek | Komentářů: 0
dnes 13:33 | Nová verze

Příspěvek na blogu webové aplikace pro spolupráci na zdrojových kódech pomocí gitu Gitea (Wikipedie) představuje novinky nové verze 1.14.0 této v programovacím jazyce Go naprogramované aplikace.

Ladislav Hagara | Komentářů: 0
dnes 09:00 | Nová verze

V březnu 2016 byl 2D animační software Toonz uvolněn jako open source pod názvem OpenToonz. O víkendu byl OpenToonz vydán ve verzi 1.5.0. Přehled novinek v poznámkách k vydání na GitHubu. Novou verzi bude možné nainstalovat také z Flathubu a Snapcraftu.

Ladislav Hagara | Komentářů: 0
dnes 08:00 | IT novinky

Společnost Espressif Systems oznámila, že rodinu SoC ESP32 brzy rozšíří o ESP32-C6 s 32bitovým RISC-V jádrem a podporou Wi-Fi 6 a Bluetooth 5 (LE).

Ladislav Hagara | Komentářů: 0
9.4. 18:33 | Zajímavý článek

MojeFedora.cz informuje co nového přinese Fedora Workstation 34. Většinu uživatelů praští do očí přepracované GNOME 40, ale další důležité změny se dějí i pod povrchem. Wayland na grafických kartách Nvidia, Pipewire jako hlavní zvukový subsystém, Fedora Toolbox s RHEL, Flatpaky ve Fedoře s inkrementálními aktualizacemi.

Ladislav Hagara | Komentářů: 48
9.4. 15:11 | Nová verze

Byla vydána verze 4.4 kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie). Kódové označení Rao bylo vybráno na počest profesora K. R. Raa za práci na DCT (diskrétní kosinová transformace).

Ladislav Hagara | Komentářů: 7
9.4. 13:55 | Nová verze

Český LibreOffice tým aktualizoval příručku LibreOffice Calc na verzi 7.0. Kniha je určena pro uživatele tabulkového procesoru LibreOffice Calc. Pokrývá hlavní oblasti programu Calc, včetně zadávání, úprav a formátování dat, funkcí a vzorců pro výpočty nad daty, statistické analýzy, kontingenčních tabulek a hledání řešení pro potřeby analýz, databázových funkcí pro nastavení, ukládání a filtrování dat, široké škály 2D a 3D grafů,

… více »
Zdeněk Crhonek | Komentářů: 0
8.4. 18:45 | Nová verze

Jamie Zawinski na apríla vydal XScreenSaver (Wikipedie) ve verzi 6.00. Přehled novinek v příspěvku na blogu a v changelogu. Proběhlo refaktorování kódu. Démon xscreensaver byl rozdělen na tři programy: xscreensaver, xscreensaver-gfx a xscreensaver-auth.

Ladislav Hagara | Komentářů: 16
8.4. 13:11 | Nová verze

Byla vydána verze 2.3.0 kryptografického softwaru GnuPG (GNU Privacy Guard), tj. svobodné implementace OpenPGP. Jedná se o první veřejnou verzi z vývojové větve 2.3. Stabilní bude až verze 2.4.0. Z novinek lze zdůraznit podporu TPM (Trusted Platform Module) 2.0 aneb soukromé klíče lze chránit pomocí tohoto kryptoprocesoru. Více v příspěvku na blogu.

Ladislav Hagara | Komentářů: 2
8.4. 09:00 | IT novinky

Úřad pro zastupování státu ve věcech majetkových (ÚZSVM) prodává v aukci 0,42337268 jednotek virtuální měny bitcoin (BTC). Nejnižší podání bylo 544 632,00 Kč. Aukce končí dnes v 15:00.

Ladislav Hagara | Komentářů: 25
Kolik času v průměru denně trávíte videohovory/-konferencemi? (ať už v práci, škole nebo soukromě)
 (51%)
 (13%)
 (16%)
 (10%)
 (7%)
 (1%)
 (1%)
Celkem 261 hlasů
 Komentářů: 7, poslední 8.4. 12:14
Rozcestník

Pocket enigma

13.8.2010 13:38 | Přečteno: 2690× | GNU | poslední úprava: 17.8.2010 16:36

Většina emulátorů enigmy, které jsem našel, měla různé chyby- například nefungovala, nebo potřebovala windows. Tak jsem našel zdroják od jednoho fungujícího (cca 100k zip projekt do visual basicu), a přepsal ho na 50-řádkový skriptík, který funguje i na PDA s Pocket Pythonem. Enjoy!
#! /usr/bin/python
from re import findall

rotor={
'I':   ('EKMFLGDQVZNTOWYHXUSPAIBRCJ','Q'),
'II':  ('AJDKSIRUXBLHWTMCQGZNPYFVOE','E'),
'III': ('BDFHJLCPRTXVZNYEIWGAKMUSQO','V'),
'IV':  ('ESOVPZJAYQUIRHXLNFTGKDCMWB','J'),
'V':   ('VZBRGITYUPSDNHLXAWMJQOFECK','Z'),
'VI':  ('JPGVOUMFYQBENHZRDKASXLICTW','MZ'),
'VII': ('NZJHGRCXMYSWBOUFAIVLPEKQDT','MZ'),
'VIII':('FKQHTLXOCBJSPDZRAMEWNIUYGV','MZ'),
'BETA': ('LEYJVCNIXWPBQMDRTAKZGFUHOS',''),
'GAMMA':('FSOKANUERHMBTIYCWLQPZXVGJD',''),
}

reflector={
3:{
'A':'EJMZALYXVBWFCRQUONTSPIKHGD',
'B':'YRUHQSLDPXNGOKMIEBFZCWVJAT',
'C':'FVPJIAOYEDRZXWGCTKUQSBNMHL',},
4:{
'B':'ENKQAUYWJICOPBLMDXZVFTHRGS',
'C':'RDOBJNTKVEHMLFCWZAXGYIPSUQ',},}

def enigma(rot,pos,sst='',rst='1-1-1',ref='B'):
 O=lambda c:ord(c)-65
 # setup rotors
 N=findall('(\w+)',rot)
 rot=[map(O,rotor[n][0]) for n in N]
 nxt=[map(O,rotor[n][1]) for n in N]
 rst=[int(r)-1 for r in findall('(\d+)',rst)]
 pos=[O(p)-r for p,r in zip(findall('(\w)',pos),rst)]
 # setup 'steckerbrett'
 xlt=range(26)
 for i,j in findall('(\w)[->]?(\w)',sst):
  i=O(i);j=O(j);xlt[i],xlt[j]=xlt[j],xlt[i]
 # select reflector
 ref=map(O,reflector[len(N)][ref])

 def enc(c):
  if not 'A'<=c<='Z':return c
  # move rotors
  if (pos[-2]+rst[-2])%26 in nxt[-2]:pos[-3]+=1;pos[-2]+=1
  elif (pos[-1]+rst[-1])%26 in nxt[-1]:pos[-2]+=1
  pos[-1]+=1
  # encode
  c=xlt[O(c)]
  for r,p in reversed(zip(rot,pos)):
   c=r[(c+p)%26]-p
  c=ref[c%26]
  for r,p in zip(rot,pos):
   c=r.index((c+p)%26)-p
  return chr(65+xlt[c%26])
 return lambda s:''.join(map(enc,s))

e=enigma('I-II-III','FOK','DO PI CE')
print e('ETHS OUATY QSUXULM AH BGQA VMDCU FCID')
       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

Luboš Doležel (Doli) avatar 13.8.2010 15:17 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Pocket enigma
By mě jen zajímalo, k čemu je to do mobilu dobré? :-)
13.8.2010 15:22 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Pocket enigma
Co když bude někde v lese a bude nutně potřebovat dešifrovat zprávu z enigmy? :-)
16.8.2010 09:35 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: Pocket enigma
No, v lese jsem nic dešifrovat nepotřeboval, ale v hospodě už jo :)
Táto, ty de byl? V práci, já debil.
13.8.2010 15:27 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Pocket enigma
+1 za přepis 100kB zdrojáku do zdrojáku o 50.řádkách :-D.
13.8.2010 16:58 void
Rozbalit Rozbalit vše Re: Pocket enigma
Píše, že je to 100kB projekt do VB; lze předpokládat, že mimo samotného kódu tam budou přibaleny i další soubory (a i ten kód asi bude zbytečně velký, pokud byl vytvořen nějakým průvodcem; krom toho tam mohou být komentáře apod.).
13.8.2010 17:38 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Pocket enigma
Vlastně ještě komprimovaný :-D.

No jestli ty další soubory jsou interpret, tak možná ;-). Komentáře toho moc navíc nezaberou (zvlášť v komprimovaným zdrojáku).

Ale jo, jestli byl grafickej, tak asi nějaký obrázky... Což ale nemění můj názor na efektivnost toho skriptu (i když je v pythonu).
13.8.2010 15:34 SPM | skóre: 28
Rozbalit Rozbalit vše Re: Pocket enigma
to sprostý slovo na předposlednim řádku je tam úmyslně nebo to takhle nějak vyšlo? :)))
16.8.2010 09:37 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: Pocket enigma
Nerozumím, jde o standardní nastavení, užívané 3. SS divizí Totenkopf :)
Táto, ty de byl? V práci, já debil.
16.8.2010 15:21 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
Rozbalit Rozbalit vše Re: Pocket enigma
Jestli bylo standardní nastavení 'do piče' [DO PI CE], tak se není pak čemu divit :-).
Baník pyčo!
multi avatar 13.8.2010 15:57 multi | skóre: 38 | blog: JaNejsemOdsut
Rozbalit Rozbalit vše Re: Pocket enigma
a jak mam neco zasifrovat? abych to pak mohl rozsifrovat
16.8.2010 10:18 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: Pocket enigma
Dešifrování je stejné jako šifrování- Enigma je fakticky jen ROT13 + hromada permutací, které se po každém znaku mění.
Táto, ty de byl? V práci, já debil.
Jendа avatar 13.8.2010 16:29 Jendа | skóre: 76 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Pocket enigma
S dovolením budu dál používat GPG :-).
13.8.2010 18:40 mimi.vx | skóre: 37 | blog: Mimi.VX | Praha
Rozbalit Rozbalit vše Re: Pocket enigma

stale existuji zpravy z WW II sifrovane enigmou ktere jeste nikdo nerozsifroval ....

USE="-gnome -kde";turris
13.8.2010 18:52 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Pocket enigma
No tak to buď je už nikdo dešifrovat nechce a nebo jsou furt vládním tajemstvím. Enigma jde dneska imho už dešifrovat obyčejným brutal force. A řekl bych, že z hlediska frekvenční analýzy taky není moc bezpečná. Ale stroj jako takovej je brutální :-D.
13.8.2010 20:47 Jirka Keresteš | skóre: 12
Rozbalit Rozbalit vše Re: Pocket enigma
Enigma je AFAIK prave proti frekvencni analyze dost odolna, za valky to lustili tusim brute-forcem. Pekne to je popsany v Knize kodu a sifer od Singha.
A physics book seems to be a mathematician's worst nightmare.
13.8.2010 22:15 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Pocket enigma
A jo (přečetl jsem si wikipedii), ale jen pokud se nebude šifrovat moc textu pro 5 a výš už je to problém. Ale na nějaký cluster nebo FPGA furt no problemo ;-).
Luboš Doležel (Doli) avatar 13.8.2010 21:20 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: Pocket enigma
Myslel jsem, že před nějakým rokem nebo déle byla akce, během které zbylé zprávy dovyluštili.
14.8.2010 10:04 Radovan
Rozbalit Rozbalit vše Re: Pocket enigma
Ať koukám jak koukám, vidím počáteční nastavení kotoučů, ale nemůžu najít kde se nastavují prstence s písmeny! Takže pro ukázku jak Enigma funguje nebo pro děti na hraní je to fakt pěkné, ale pro luštění skutečných zpráv šifrovaných Enigmou nepoužitelné. Viz zde, prstenec 3 se otáčí na kroužku 7 s pružnou západkou... Přesný popis i s testovací zprávou je tady, akorát je z už roku 1930 pro civilní Enigmu, takže vojenské se nechytají kvůli jinému pořadí zapojení vstupních kontaktů ;-)
14.8.2010 12:45 zde
Rozbalit Rozbalit vše Re: Pocket enigma
Viz Wiki, nastaveni prstencu je irelevantni. Staci je mit napevno a jen posouvat o dany offset pismena, kterymi zadavam nastaveni kotouce- vyjde to nastejno.
14.8.2010 16:05 Radovan
Rozbalit Rozbalit vše Re: Pocket enigma
nastaveni prstencu je irelevantni

Což je úplná blbost, a jestli tohle píše Wiki, tak pěkně kecá! Podívej se pořádně na ten obrázek který jsem odkazoval. Vnitřní kruh obsahuje propojky, na vnějším prstenci s písmeny (u starších verzí čísly) je ozub (u pozdních verzí i několik), který způsobí pootočení dalšího kotouče. Takže to vyjde nastejno jen pro prvních maximálně pětadvacet písmen, do prvního ozubu, pak se ti šifra rozhodí. Kdo nevěří ať tam běží, a buď si pořídí skutečnou Enigmu nebo dokonalý simulátor, a odzkouší si to sám ;-) Pro porovnání můžeš použít jednoduchý simulátor, který by měl odpovídat tomu prográmku nahoře:

otevřený text zprávy: enigmabylnemeckysifrovacistrojpouzivanyvobdobidruhesvetovevalky
jednoduchý simulátor: fqgahwjeahnnloqqutzvlnqjxfgxjtktmywwiavzjkwlyzktxmzlhxcbbtqcrhv
posun 1. rotoru o +1: fqgahwjeahnnloqqutzvinqjxfgxjtktmywwiavzjkwlyzftxmzlhxcbbtqcrhv
posun 1. rotoru o +7: fqgahwjeahnnlohgyaqbinqjxfgxjtktmywwiavzjpmahdftxmzlhxcbbtqcrhv
posun 1. rotoru o -1: fqgahwjeahnnloqqutzvlhqjxfgxjtktmywwiavzjkwlyzkqxmzlhxcbbtqcrhv

Prvním rotorem je myšlen ten úplně vpravo - vstupní, rozdíly jsou u skutečného simulátoru zvýrazněné, tak si zkus představit, nebo rovnou nasimulovat, co by ti to udělalo při dešifrování. Jistě, ono je to místy čitelné, ale když do toho zamícháš ještě další dva rotory (u námořní Enigmy tři) tak z toho máš po pár větách totální guláš, a ne zprávu s přesnými pokyny.
Jestli je na Enigmě něco zbytečného, tak je to propojovací deska, která ztěžovala akorát její používání, pro luštitele v Bletchley Parku nebyla problém. Trochu víc srandy do toho vnesl Enigma Uhr, ale ten se objevil pozdě a moc se nepoužíval.
16.8.2010 09:47 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: Pocket enigma
Note that although the ring settings (ringstellung) were a required part of the setup, they did not actually affect the message encryption because the rotors were positioned independently of the rings.
Nojo, máš pravdu, asi fakt kecají. Jestli jsou posouvací čudlíky na těch prstencích a ne přímo na rotorech, tak to vliv na šifrování určitě má. Vypadá to na +3 řádky kódu :)

Ta odkazovaná verze simulátoru neumí tenkej reflektor a 4 rotory.. nebo se mi to tak aspoň jeví.. ale pro odladění to snad bude dobrý. Na to byla nejlepší papárová enigma: http://mckoss.com/Crypto/Paper%20Enigma.pdf
Táto, ty de byl? V práci, já debil.
16.8.2010 19:20 Radovan
Rozbalit Rozbalit vše Re: Pocket enigma
Tu papírovou také znám, ale to je fakt jen hračka :-) Osobně pro důvěrnou korespondenci dávám přednost starému dobrému Vigenérovi v kapesním provedení (když teda nemám po ruce počítač s libovolným BASICem, tam je to otázka deset minut), pro kratší zprávy to stačí a u delších se dá šifrovat dvojitě. První heslo třeba 11 znaků, druhé 13, dohromady dají 143 znaky dlouhé a na to se nechytají ani Babbage s Kasiskim dohromady, pokud teda nebudu posílat román :-D A pokud stejná hesla nepoužiji opakovaně, samozřejmě.

Posouvací mechanizmus Enigmy je vlastně dvouzvratná páka umístěná na dně skříně, na předním konci je deska o kterou se spodními konci tyček opírají klávesy, na zadním osa, na které jsou zavěšené odpružené západky. Ty jsou v základní poloze opřené spodním koncem o šasi a tím odkloněné ze záběru, aby se kotouči dalo volně otáčet, aretují je kladky (na obrázku oranžové) zapadající do vlnek na plechovém disku, vyčnívajícím skrz horní stěnu ven, vedle okének. Na tomhle disku je z pravé strany rohatka, do které ta západka při posunu zabírá. První rotor je jasný, ten se posouvá při každém stisku, o to se staré ta úzká západka úplně vpravo. Na levé straně rotoru, na vnějším okraji toho otočného prstence s písmeny je přišroubovaný ocelový kroužek se zářezem, který je na každém rotoru u jiného písmene. Po tom kroužku druhá a třetí západka kloužou, dokud se rotor nedostane do té správné polohy, kdy západka zapadne, zabere do rohatky na dalším rotoru a posune je oba společně.

Právě na to pozor! Enigma má několik "vlastností", které citelně snižují počet možných kombinací. Taková běžně známá je ta, že díky reflektoru se každé písmeno může zašifrovat do některého z pětadvaceti ostatních, ale nikdy nevyjde stejné, jak je to možné třeba u toho Vigenéra. Méně známé, ale o to zajímavější, je dvojí posunutí druhého rotoru (double stepping). Vychází právě z funkce toho posouvacího mechanizmu, kde západka zabírá do dvou rotorů současně a posunuje je společně... Pro příklad, kdyby všechny rotory měly zářez odpovídající písmenu B v okénku, vypadalo by to takhle:

1: A A A
2: A A B
3: A B C
4: B C D
5: B C E
6: B C F
...

Není to jako u tachometru, kde by druhý rotor v poloze B čekal celou otočku toho prvního, tady se prostě posune společně se třetím hned při příštím stisku klávesy!

Ten simulátor umí nejen Enigmu M3, jsou tam čtyři různé verze, námořní M4, původní Enigma I (jediný simulátor ve kterém se mi podařilo rozluštit tu testovací zprávu z roku 1930), a dokonce Enigma G, používaná Abwehrem! Ta měla trochu odlišnou konstrukci a zcela nekompatibilní rotory s jiným rozmístěním kontaktů a spoustou posouvacích zářezů, na rozdíl od armádních a námořních, kterých se dochovaly spousty, je to obrovská rarita. V chodu vypadá moc zajímavě, právě proto že rotory se posunují mnohem častěji než na klasické Enigmě.

Ještě mě napadá jeden detail k té námořní M4, ta má sice čtyři kotouče, ale jako čtvrtý se používaly speciální, které se neotáčely! Mechanizmus té M4 je jinak shodný s M3, má také jen tři západky, liší se jen tenkým reflektorem.
17.8.2010 16:40 zde | skóre: 9 | blog: Linuch | Brno
Rozbalit Rozbalit vše Re: Pocket enigma
Přidán parametr pro 'ringstellung', a taky jsem našel že 3-rotorová enigma měla i reflektor 'A', tak jsem to tam taky přidal..

K louskání vigenera: obvykle jde odhadnout fráze plaintextu, která je aspoň o 1-2 znaky delší než klíč, takže louskání je celkem snadné. Délku klíče jsem nikdy určovat nemusel, prostě jsem zkoušel všechny možnosti.. Dvojité šifrování různými klíči s nesoudělnou délkou je dobrý nápad, pro mě novinka.
Táto, ty de byl? V práci, já debil.
18.8.2010 21:40 Radovan
Rozbalit Rozbalit vše Re: Pocket enigma
Tak jsem prohrabal archiv a zahlédl, že reflektory u čtyřrotorové M4 prý byly otočné, ale zmiňuje se o tom jen jeden zdroj! Já si nic takového odjinud nepamatuji, myslel jsem že reflektory byly pevné a nastavoval se jen tenký rotor (ne že by zrovna moje paměť byla něco, na co se dá stoprocentně spolehnout :-D). Zajímavý byl reflektor D, ten se dal zapojit libovolně pomocí kablíků, také dost neobvyklá věc, mám pocit že s tím si na konci války v Bletchley Parku už neporadili.

Ty časté fráze se používaly i na Enigmu, je to docela dobrá metoda když člověk ví co má hledat. Často se takhle podařilo rozluštit aspoň část zprávy.

U těch dvou klíčů jde o to, aby jejich měly co největší společný násobek (nejvhodnější jsou prvočísla, ale to zase zjednodušuje jejich případné hledání), výsledek je podobný jako při použití jednoho hesla s velkou délkou. Má to ale proti němu jednu nevýhodu, dešifrovat se musí hesly v opačném pořadí než se šifrovalo, jinak vyjde nesmysl (šifrování: hesla A,B - dešifrování: B,A). Vícenásobné šifrování se používalo běžně, ale většinou to byla kombinace více šifer, třeba transpozice/substituce/transpozice. Vypadá to bezpečně, ale Němci to našemu odboji celkem běžně luštili :-(

No, tak mě to inspirovalo, že jsem konečně začal vyrábět vlastní simulátor té Enigmy, už jsem se na to párkrát chystal a teď mám aspoň pořádný důvod ;-)
6.9.2010 15:11 Radovan
Rozbalit Rozbalit vše Re: Pocket enigma
Nějaký čas trvalo než jsem to po chvilkách poslepoval, ale je to tu. Na padesát řádků jsem se sice nevešel, má to třikrát tolik, zato je tam spousta pokynů a kontrol chybného zadání, takže doufám v slušnou blbuvzdornost, aby obsluhu zvládl i člověk který o Enigmě skoro nic neví ;-)

10 PRINT "+-----------------------------------------------+"
20 PRINT "| Simulátor německého šifrovacího stroje ENIGMA |"
30 PRINT "|       v1.0 - vojenské modely I, M3, M4        |"
40 PRINT "+-----------------------------------------------+"

100 DIM p$(10),q$(10),o$(10),r$(4),k$(4),tr(4),op(4),ov(4)
110 DEF FNv$(w$)=CHR$(ASC(w$)-(w$>="a" AND w$<="z")/(1>0)*32)
120 DEF FNn(w$)=w$<"A" OR w$>"Z"

200 READ s$:RESTORE
210 FOR i=0 TO 10
220     READ q$(i),o$(i):p$(i)=q$(i)
230     FOR j=1 TO 26
240         MID$(p$(i),ASC(MID$(q$(i),j,1))-64)=CHR$(j+64)
250     NEXT j
260 NEXT i
270 FOR i=0 TO 4
280     READ r$(i)
290 NEXT i
300 FOR i=0 TO 4
310     READ k$(i)
320 NEXT i
330 mo=3

400 DATA "ABCDEFGHIJKLMNOPQRSTUVWXYZ"," "
410 DATA "EKMFLGDQVZNTOWYHXUSPAIBRCJ","Q"
420 DATA "AJDKSIRUXBLHWTMCQGZNPYFVOE","E"
430 DATA "BDFHJLCPRTXVZNYEIWGAKMUSQO","V"
440 DATA "ESOVPZJAYQUIRHXLNFTGKDCMWB","J"
450 DATA "VZBRGITYUPSDNHLXAWMJQOFECK","Z"
460 DATA "JPGVOUMFYQBENHZRDKASXLICTW","ZM"
470 DATA "NZJHGRCXMYSWBOUFAIVLPEKQDT","ZM"
480 DATA "FKQHTLXOCBJSPDZRAMEWNIUYGV","ZM"
490 DATA "LEYJVCNIXWPBQMDRTAKZGFUHOS"," "
500 DATA "FSOKANUERHMBTIYCWLQPZXVGJD"," "
510 DATA "EJMZALYXVBWFCRQUONTSPIKHGD"
520 DATA "YRUHQSLDPXNGOKMIEBFZCWVJAT"
530 DATA "FVPJIAOYEDRZXWGCTKUQSBNMHL"
540 DATA "ENKQAUYWJICOPBLMDXZVFTHRGS"
550 DATA "RDOBJNTKVEHMLFCWZAXGYIPSUQ"
560 DATA "B123","AAA","AAA",""
570 DATA "BJELRQZVJWARXSNBXORSTNCFME"

1000 PRINT " Zadej sestavení kotoučů (Einstellung)"
1010 PRINT "ENIGMA I - například A213"
1020 PRINT " 1. znak = typ reflektoru: A (Umkehrwalze)"
1030 PRINT " 2.-4. znak = rotory zleva doprava: 1 až 3 (Walzen)"
1040 PRINT "ENIGMA M3 - například B213"
1050 PRINT " 1. znak = typ reflektoru: B,C (Umkehrwalze)"
1060 PRINT " 2.-4. znak = rotory zleva doprava: 1 až 8 (Walzen)"
1070 PRINT "ENIGMA M4 - například CG864"
1080 PRINT " 1. znak = typ 'tenkého' reflektoru: B,C (Umkehrwalze 'dünn')"
1090 PRINT " 2. znak = typ 'tenkého' rotoru: B=Beta,G=Gamma (Griechenwalze)"
1100 PRINT " 3.-5. znak = rotory zleva doprava: 1 až 8 (Walzen)"
1200 PRINT "Aktuální nastavení: ";k$(0)
1210 PRINT "Zapiš novou konfiguraci nebo nic pro ponechání:"
1220 INPUT "",t$:GOSUB 7000:IF LEN(t$)=0 THEN t$=k$(0)
1230 mo=LEN(t$)-1:IF mo<3 OR mo>4 THEN PRINT "*** Chybná konfigurace!"+CHR$(7):GOTO 1200
1240 IF LEFT$(t$,1)<"A" OR LEFT$(t$,1)>"C" THEN PRINT "*** Špatný typ reflektoru!"+CHR$(7):GOTO 1200
1250 tr(0)=ASC(LEFT$(t$,1))-65
1260 IF mo=3 THEN GOTO 1400
1300 IF tr(0)=0 THEN PRINT "*** ENIGMA M4 nemohla používat reflektor A!"+CHR$(7):GOTO 1200
1310 tr(0)=tr(0)+2
1320 z$=MID$(t$,2,1)
1330 IF z$<>"B" AND z$<>"G" THEN PRINT "*** Špatný typ 'tenkého' rotoru!"+CHR$(7):GOTO 1200
1340 tr(1)=(ASC(z$)-61)/5+8
1400 FOR i=mo-2 TO mo
1410     z$=MID$(t$,i+1,1)
1420     IF z$<"1" OR z$>"8" THEN PRINT "*** Špatný typ rotoru!"+CHR$(7):GOTO 1200
1430     tr(i)=VAL(z$)
1440 NEXT i
1450 k$(0)=t$

2000 PRINT " Zadej nastavení prstenců (Ringstellung),"
2010 PRINT "například EZY pro ENIGMU M3 nebo AEZY pro ENIGMU M4:"
2020 PRINT "Aktuální nastavení: ";k$(1)
2030 PRINT "Zapiš novou hodnotu nebo nic pro ponechání:"
2040 INPUT "",t$:GOSUB 7000:IF LEN(t$)=0 THEN t$=k$(1)
2050 IF LEN(t$)<>mo THEN PRINT "*** Chybná délka!"+CHR$(7):GOTO 2000
2060 FOR i=1 TO mo
2070     z$=MID$(t$,i,1)
2080     IF FNn(z$) THEN PRINT "*** Chybné nastavení!"+CHR$(7):GOTO 2000
2090     op(i)=ASC(z$)-65
2200 NEXT i
2210 k$(1)=t$

3000 PRINT " Zadej počáteční postavení rotorů (Grundstellung),"
3010 PRINT "například XPI pro ENIGMU M3 nebo FXPI pro ENIGMU M4"
3020 PRINT "Aktuální otočení: ";k$(2)
3030 PRINT "Zapiš novou pozici nebo nic pro ponechání:"
3040 INPUT "",t$:GOSUB 7000:IF LEN(t$)=0 THEN t$=k$(2)
3050 IF LEN(t$)<>mo THEN PRINT "*** Chybná délka!"+CHR$(7):GOTO 3000
3060 FOR i=1 TO mo
3070     z$=MID$(t$,i,1)
3080     IF FNn(z$) THEN PRINT "*** Chybné nastavení!"+CHR$(7):GOTO 3000
3090     ov(i)=ASC(z$)-65
3200 NEXT i
3210 k$(2)=t$

4000 PRINT " Zadej propojovací kabely (Steckerverbindungen),"
4010 PRINT "max. 13 dvojic písmen, oddělených jednou mezerou,"
4020 PRINT "například AF ZM XV WN CP KL"
4030 PRINT "Aktuální nastavení: ";k$(3)
4040 PRINT "Zapiš nové propojení, tečku pro zrušení nebo nic pro ponechání:"
4050 INPUT "",t$:GOSUB 7000:IF LEN(t$)=0 THEN GOTO 5000
4060 IF LEFT$(t$,1)=" " THEN t$=MID$(t$,2):GOTO 4060
4070 IF RIGHT$(t$,1)=" " THEN t$=LEFT$(t$,LEN(t$)-1):GOTO 4070
4080 IF LEFT$(t$,1)="." THEN RESTORE:READ s$:GOTO 5000
4090 RESTORE:READ s$
4100 t$=t$+" "
4110 PRINT "Zapojuji: ";
4120 FOR i=1 TO LEN(t$) STEP 3
4130     PRINT MID$(t$,i,3);
4140     IF FNn(MID$(t$,i,1)) OR FNn(MID$(t$,i+1,1)) THEN PRINT " *** Chybný znak!"+CHR$(7):GOTO 4000
4150     x=ASC(MID$(t$,i,1))-64:y=ASC(MID$(t$,i+1,1))-64
4160     IF MID$(s$,x,1)<>CHR$(x+64) OR MID$(s$,y,1)<>CHR$(y+64) THEN PRINT " *** Pozice už je obsazena!"+CHR$(7):GOTO 4000
4170     w$=MID$(s$,x,1):MID$(s$,x)=MID$(s$,y,1):MID$(s$,y)=w$
4180 NEXT i:PRINT
4190 k$(3)=t$

5000 PRINT " Napiš text pro (de)šifrování: "
5010 INPUT "",t$:GOSUB 7000:IF LEN(t$)=0 THEN t$=k$(4)
5020 FOR i=1 TO LEN(t$)
5030     z$=MID$(t$,i,1)
5040     IF FNn(z$) THEN GOTO 5600
5100     FOR j=1 TO LEN(o$(mo-1))
5110         IF ov(mo-1)+65<>ASC(MID$(o$(tr(mo-1)),j,1)) THEN GOTO 5150
5120         ov(mo-2)=(ov(mo-2)+1)MOD 26
5130         ov(mo-1)=(ov(mo-1)+1)MOD 26
5140         GOTO 5190
5150     NEXT j
5160     FOR j=1 TO LEN(o$(mo))
5170         IF ov(mo)+65=ASC(MID$(o$(tr(mo)),j,1)) THEN ov(mo-1)=(ov(mo-1)+1)MOD 26
5180     NEXT j
5190     ov(mo)=(ov(mo)+1)MOD 26
5300     PRINT "|";
5310     FOR j=1 TO mo
5320       PRINT CHR$(ov(j)+65)+"|";
5330     NEXT j
5340     PRINT " "+z$;
5400     z$=MID$(s$,ASC(z$)-64,1)
5410     FOR j=mo TO 1 STEP -1
5420         z$=CHR$(65+(ASC(MID$(q$(tr(j)),1+(ASC(z$)+ov(j)-op(j)-13)MOD 26,1))-ov(j)+op(j)-13)MOD 26)
5430     NEXT j
5440     z$=MID$(r$(tr(0)),ASC(z$)-64,1)
5450     FOR j=1 TO mo
5460         z$=CHR$(65+(ASC(MID$(p$(tr(j)),1+(ASC(z$)+ov(j)-op(j)-13)MOD 26,1))-ov(j)+op(j)-13)MOD 26)
5470     NEXT j
5480     z$=MID$(s$,ASC(z$)-64,1)
5490     PRINT " = "+z$:MID$(t$,i)=z$
5600 NEXT i
5700 PRINT t$:k$(4)=t$
5710 PRINT "Konečné postavení rotorů: ";
5720 FOR i=1 TO mo
5730     z$=CHR$(ov(i)+65)
5740     PRINT z$;
5750     MID$(k$(2),i)=z$
5760 NEXT i
5770 PRINT

6000 INPUT "Pokračovat v práci? (A/N) ",t$:t$=t$+" "
6010 IF LEFT$(FNv$(t$),1)<>"N" THEN GOTO 1000
6020 PRINT "(C)2010 FARAON"
6030 END

7000 FOR i=1 TO LEN(t$)
7010     MID$(t$,i) = FNv$(MID$(t$,i,1))
7020 NEXT i
7030 RETURN

Program je odladěný v Chipmunk Basicu a QBasicu, ale doporučuji GWBasic v DOSBoxu podtaktovaném na nějakých 100 cyklů, to je pak jen o málo rychlejší než skutečná Enigma :-D Pokud se END na řádku 6030 nahradí příkazem SYSTEM, tak se navíc interpret sám ukončí (případně EXIT, QUIT, BYE, podle toho co kdo použijete).
Zprávu není nutné napsat celou najednou, s ohledem třeba na ty microsoftí Basicy, které na vstupu poberou jen 255 bytů, proto si program pamatuje (a vypisuje) stav, a s dalším kouskem textu pokračuje tam kde naposledy skončil.
Ještě tam možná dodám model Tirpitz, když bude čas a dohledám všechny odlišnosti, zatím chystám port na ZX Spectrum a Commodore 64... :-)
Přidám jednu zajímavost, čtyřrotorový model M4 může emulovat třírotorový M3, kombinace tenkého reflektoru B a tenkého kotouče Beta s prstencem v poloze A a nastavení A odpovídá běžnému reflektoru B v M3, tenký reflektor C a tenký kotouč Gamma se stejným nastavením zase dohromady dají běžný reflektor C.
15.9.2010 22:24 Radovan
Rozbalit Rozbalit vše Re: Pocket enigma
Stará pravda říká, že dokonale blbuvzdorný program neexistuje, protože vždycky se najde ještě větší blb, takže Service Pack 1 :-D

30 PRINT "|       v1.1 - vojenské modely I, M3, M4        |"

4080 IF LEFT$(t$,1)="." THEN PRINT "Odpojuji vše.":RESTORE:READ s$:k$(3)="":GOTO 5000
4090 t$=t$+" ":IF LEN(t$)<3 THEN GOTO 5000
4100 RESTORE:READ z$

4120 FOR i=1 TO LEN(t$)-2 STEP 3
4130     MID$(t$,i+2)=" ":PRINT MID$(t$,i,3);

4160     IF MID$(z$,x,1)<>CHR$(x+64) OR MID$(z$,y,1)<>CHR$(y+64) THEN PRINT " *** Pozice už je obsazena!"+CHR$(7):GOTO 4000
4170     w$=MID$(z$,x,1):MID$(z$,x)=MID$(z$,y,1):MID$(z$,y)=w$

4190 s$=z$:k$(3)=t$

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.