home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 41 / Flop_Magazin_412_1999_Raster_cs_Side_B.atr / drsek.txt < prev    next >
Internet Message Format  |  2023-02-26  |  4KB

  1. From: "Filip Drsek" <DRSEK@gymcheb.hiedu.cz>¢To: "All about Atari beast an' even more..." <Atari-l@cvtnw.upol.cz>¢Subject: Sifrovani souboru¢Date: Wed, 17 Dec 1997 15:19:32 MET-DST¢¢    Pokusim se zde popsat metodu sifrovani souboru na Atari 800/130.¢    Soubor je mozne sifrovat nejjednoduseji tak, ze kazdy jeho byte ¢zvysime o totez cislo a takto vznikle cislo pripadne jeste upravime ¢odectenim 256, aby se veslo do potrebneho rozsahu. Pri desifrovani od ¢kazdeho bytu odecitame tutez konstantu a opet upravujeme na potrebny ¢rozsah (+256 u zapornych cisel).¢    Takto sifrovany soubor se vsak da pomerne snadno rozlustit. Staci ¢vyzkouset postupne konstanty 1 az nejvyse 255, treba jen na cast ¢souboru. Pokud jde o spustitelny binarni soubor, staci najit takovou ¢konstantu, aby prvni dva byty byly desifrovany jako 255 a 255, coz je ¢poznavaci znameni tohoto typu souboru. U textoveho souboru by se ¢poznalo nalezeni spravne konstanty podle velkeho vyskytu pismen a ¢mezer a aspon castecne srozumitelnosti slov.¢    U nekterych pocitacu se da ovladat generator nahodnych cisel ¢(napriklad prikazem Randomize) tak, ze pro stejny zaklad ¢dostaneme vzdycky stejnou posloupnost cisel. Kazde nasledujici ¢nahodne cislo je vypocitano z predchoziho, neodecita se z zadneho ¢casovace jako u Atari. Na takovem pocitaci pak muzeme napsat ¢sifrovaci program, ktery k jednotlivym bytum souboru nepricita ¢konstantu, ale ruzna cisla z generatoru nahodnych cisel, spusteneho ¢od urciteho zakladu. Navic zakladu muze byt mnohem vic nez konstant, ¢takze takto sifrovany soubor uz se neda jen tak snadno rozlustit.¢    Ve svem postupu jsem jako generator nahodnych cisel pouzil ¢jednoduchy multiplikativni algoritmus. Nasledujici cislo se z ¢predchoziho vypocita jeho vynasobenim nejakou konstantou ¢(nejvhodnejsi je cislo 83) a naslednym odstranenim celociselne casti ¢tohoto soucinu. Vychozi hodnotu pro generator nahodnych cisel program ¢vypocita z hesla, ktere muze byt 2 az 10 znaku dlouhe a muze obsahovat ¢libovolne znaky krome Backspace, Return a CHR$(0), podle vzorce ¢R0=SQR(C/(128*D*(D+1))), kde C je soucet soucinu ASCII-kodu ¢jednotlivych znaku a jejich poradovych cisel a D je pocet znaku ¢hesla. Vyraz za lomitkem je navrzen tak, aby byl vzdycky vetsi nez ¢C, a odmocnina zvysuje pocet desetinnych mist v cisle.¢    Program muze vypadat napriklad takto:¢¢ 1 REM Sifrator¢ 2 H$(10),KH$(10),ZDROJ$(15),CIL$(15),SD$(1)¢ 3 PRINT "Zadejte heslo : ";:GOSUB 20¢ 4 H$=KH$¢ 5 PRINT "Kontrola hesla: ";:GOSUB 20¢ 6 IF H$<>KH$ THEN PRINT "Chyba pri zadavani hesla!":GOTO 3¢ 7 C=0:D=LEN(H$):FOR A=1 TO D:C=C+A*ASC(H$(A,A)):NEXT A:¢   R0=SQR(C/(128*D*(D+1))):R=R0¢ 8 PRINT "(S)ifrovat, nebo (D)esifrovat";:INPUT SD$¢ 9 IF SD$<>"S" AND SD$<>"D" THEN PRINT "S nebo D, prosim.":GOTO 8¢10 PRINT "Zdrojovy soubor";:INPUT ZDROJ$¢11 PRINT "Cilovy soubor  ";:INPUT CIL$¢12 IF ZDROJ$=CIL$ THEN PRINT "Soubory musi byt ruzne!":GOTO 10¢13 OPEN #1,4,0,ZDROJ$:OPEN #2,8,0,CIL$:TRAP 15¢14 GET #1,A:A=A+((SD$="S")-(SD$="D"))*INT(256*R):A=A+256*(A<0)-256* ¢   (A>255):PUT #2,A:R=83*R-INT(83*R):GOTO 14¢15 CLOSE #1:CLOSE #2¢16 IF PEEK(195)=136 THEN PRINT "Hotovo!":END¢17 PRINT "Doslo k chybe ";PEEK(195):END¢20 REM Heslo¢21 KH$="":N=0:OPEN #3,4,0,"K:"¢22 GET #3,A:IF A=0 THEN 22¢23 IF A=126 OR A=155 THEN 25¢24 IF N<10 THEN PRINT "*";:N=N+1:KH$(LEN(KH$)+1)=CHR$(A):GOTO 22¢25 IF A=126 AND N>1 THEN PRINT CHR$(A);:N=N-1:KH$=KH$(1,N):GOTO 22¢26 IF A=126 AND N=1 THEN PRINT CHR$(A);:N=0:KH$="":GOTO 22¢27 IF A=155 AND N>1 THEN 29¢28 GOTO 22¢29 CLOSE #3:RETURN¢.¢