Názory ke článku Programování v praxi - 3.díl
Ano. Je to typ specialne urceny pro praci s textovym souborem.
4Dracker: Jses prvni, koho vidim, ze pouziva vnorene procedury. Podle me to dela v programu akorat binec, je lepsi to cele uzavrit do nejake samostetne jednotky a pak pristupovat pres uses.
25. 3. 2007
1.) No, to odsazení je strašné...
2.) řetězec v úvozovkách? snad apostrofy, ne?
3.) středník za begin?
4.) když má vystupden obsahovat odinální hodnoty znaků, proč je tam integer a ne byte?
5.) write(jmeno,chr( vystupden[J])); při součtu ord. hodnoty a kódu vyšším než 255 hodí chybu
6.) proč nejde jmeno výstupniho souboru zadat? každý si to tak upraví!
7.) vysvětlovat I:=1; nebo I:=I+1;? proč?
8.) navíc je to celkově strašný šifrovací algoritmus, první co zkusí někdo je posunutí a když zkusí všech 255 (s PC žádný problém), uvidí že sudé znaky jsou ok, při jednom a liché při jiném a má výsledek. Pošli mi smysluplný text zašifrovaný touhle metodou a vrátím rozšifrovaný text a oba klíče!
25. 3. 2007
To ChaoticRoman: nestudoval jsem článek, ale řeknu ti to takhle.. pošli mi šifru, kterou nikdo neprolomí ;) :-P
Můžete mi někdo povědět, proč, když zadám textbackground(white+blink), pozadí nebliká?
Díky
To ti asi nepošle, ale může ti poslat šifru kterou ty a ani dalších 99% lidí nebude schopno prolomit ...
Jinak mi taky tenhle článek přijde jako zajímavý ... vtip.
1. Neučím tady jak správně odsazovat a upravovat podobu zdrojového kódu.
2. To je moje chyba, opravím
3. Může být ale nemusí
4. Protože když tam uložím ordinální hodnotu znaku a k ni přičtu hodnotu třeba 1234 tak už se do byte nevejde.
5. Nehodí, mám odskoušeno (Borland Pascal 7)
7. Třeba to někomu není jasné :)
8. Nikde sem neřek že to je extra bezpečný algoritmus. Jde hlavně o to, vysvětlit některé příkazy a programovací postupy.
Co třeba šifrovací mřížka? třeba z těch jednoduchých na pochopení. když má 12x12 polí, kde je +/- 10E20 možností, nepomůže ani superPC.
Já vím, neber si to zle... určitě je to přínosný seriál, ale kdyby sis dal 10 minut (s takovým kouskem víc ne) a všechno to odsadil podle hierarchie, vypadalo by to daleko líp a hlavně by to bylo přehlednější... s tím 4. bodem, když přičteš na víc než 255, už to nepujde převézt na znak, ne? převádět to na hodnotu (A mod 256) by to vyřešilo... budu sledovat i dál.
8. 4. 2007
Pozadí nebliká. Bliká popředí. Proto se atribut blikání nastavuje u TextColor - tedy: TextColor(white+blink)
8. 4. 2007
Teda naprogramovaný je to děsně.
Nejhůř je udělaná procedura Nacteni.
Načítání textu přes syrový ReadKey je hodně pochybný, protože nebereš v úvahu, že ReadKey někdy vrací jeden znak, jindy dva znaky a že reaguje i na jiné klávesy než písmenka. Proto musíš ReadKey obalit do obslužné funkce:
Function Klavesa:word;
var c:char;
begin
c:=ReadKey;
if c=0 then Klavesa:=256+word(ReadKey) else Klavesa:=word(c);
end;
Vlastní procedura Nacteni potom úplně nesmyslně využívá cyklus s podmínkou na začátku. Daleko lepší je v tomhle případě cykl REPEAT-UNTIL. Například takhle:
Procedure Nacteni;
var w:word;
begin
ClrScr;
i:=0;
repeat
w:=Klavesa;
if (w>31) {pod 32 jsou znaky CTRL+neco, je lepsi je ignorovat}
and
(w<256) {nad 255 jsou sipky, eFka a podobne, je lepsi je ignorovat}
then
begin
i:=i+1;
vstupden[i]:=char(w);
write(vstupden[i]);
end;
until w=13;
writeln;
writeln;
end;
Zápis if J mod 2=0 je lepší nahradit if odd(j)
Celý algoritmus kódování je ovšem pochybný. Nejde o to, že je dost slabý, ale je celkem šílený, že se dvojnásobně zvětší velikost textu v paměti po zakódování. (z typu char na typ integer)
27. 4. 2007
Neprolomitelná šifra existuje a její neprolomitelnost je matematicky dokázána. Jmenuje se Vernamova šifra a je založená na bitové operaci xor.
Mám zdrojový text a klíč, oba třeba stringy.
for i:=1 to length(vstup) do
vystup[i]:=vstup[i] xor klic[i mod length(klic)];
A to je celé. Dešifrování se provede úplně stejným přexorováním výstupu původním klíčem.
A ta neprolomitelnost? Když mám klíč stejně dlouhý jako vstupní text (a je složen z dostatečně neuhodnutelných znaků), můžu vyzkoušet jakýkoli klíč a z něj mi může vyjít naprosto jakákoli zpráva. Když si vymyslím vhodný klíč, tak bude zpráva i čitelná a smysluplná, ale nikdy nezjistím, jestli to byla ta, kterou autor původně zašifroval.
Nějak se ten kód špatně zobrazuje (bez hranatých závorek). Takže pokus č. 2:
for i:=1 to length(vstup) do
vystup[ i ]:=vstup[ i ] xor klic[ i mod length(klic) ];