Ciao a tutti.
Vorrei creare un programma che cripti e decripti un testo con più possibili algoritmi ma non riesco a capire come iniziare.
Mi potete fare un esempio di una procedura che cripti una stringa ed un'altra che la decripti?
Grazie.![]()
Ciao a tutti.
Vorrei creare un programma che cripti e decripti un testo con più possibili algoritmi ma non riesco a capire come iniziare.
Mi potete fare un esempio di una procedura che cripti una stringa ed un'altra che la decripti?
Grazie.![]()
Non sono molto esperto di crittografia però se vuoi informazioni sui vari cifrati prova qui!
mentre per programmarne qualcuno in pascal io ho provato ad usare i file di testo e la codifica ascii almeno per gli algoritmi più semplici! è uscito qualcosa di decente anche se non so se è il metodo migliore!
Il programma è un'implementazione dell'algoritmo RC4 . Il linguaggio utilizzato è il PascalX . Spero ti sia d'aiuto . Buona programmazione![]()
codice:program ArCFour; var a:string[255]; b:string[255]; c:string[255]; function XOR(in1:char;in2:char):char; var i : integer; x : integer; y : integer; o : integer; begin x:=in1; y:=in2; for i:=0 to 7 do begin if x mod 2<>y mod 2 then o:=o+(2 POW i); x:=x div 2; y:=y div 2; end; XOR:=o; end; function RC4(intxt:string;key:string):string; var s:array [0..255] of char; k:array [0..255] of char; temp:char; y:char; c:char; i:int; j:int; j1:int; j2:int; t:int; x:int; outxt:string[255]; begin outxt:=''; for i:=0 to 255 do s[i]:=i; j:=1; for i:=0 to 255 do begin if j>Length(key) then j:=1; k[i]:=key[j]; j:=j+1; end; j:=0; for i:=0 to 255 do begin j1:=s[i]; j2:=k[i]; j:=(j+j1+j2) mod 256; temp:=s[i]; s[i]:=s[j]; s[j]:=temp; end; i:=0; j:=0; for x:=1 to Length(intxt) do begin i:=(i+1) mod 256; j1:=s[i]; j:=(j+j1) mod 256; temp:=s[i]; s[i]:=s[j]; s[j]:=temp; j1:=s[i]; j2:=s[j]; t:=(j1+(j2 mod 256)) mod 256; y:=s[t]; j1:=Xor(intxt[x],y); outxt:=outxt+Chr(j1); end; RC4:=outxt; end; begin a:='Stringa da criptare'; b:='key'; c:=RC4(a,b); writeln('Stringa criptata'); writeln(c); writeln('Stringa decriptata'); writeln(RC4(c,b)); end.
Grazie a tutti e due! Volevo fare delle domande xkè ci sono alcune cose che non ho ben capito:
-Che differenza c'è tra il pascal e il pascalx?
-xkè nell'implementazione dell'algoritmo RC4 non c'è la dichiarazione della libreria? e se si fa il debug con la libreria c'è un errore sulla dichiarazione della funzione XOR.
A quanto pare non sono ancora abbastanza bravo da capire il codice scritto da king64 quindi ho fatto un programma che cripta sfruttando il codice ascii come mi ha consigliato mico:
code:
Program cript;
uses crt;
var s:string;
i:integer;
begin
writeln('inserisci il messaggio da criptare');
readln(s);
for i:=1 to Length(s) do
Write((ord(s[i]))*2,'0');
repeat until keypressed;
end.
non riesco comunque a creare il programma che lo decripti. sapreste aiutarmi?
thank's
![]()
Il PascalX è un compilatore Pascal che compila in modalità console .Originariamente inviato da lomiz
-Che differenza c'è tra il pascal e il pascalx?
Lo puoi scaricare all'indirizzo che ti ho linkato precedentemente . E' un compilatore molto leggero ke manca delle librerie come nel TP; le poche funzioni disponibili sono contenute nel compilatore stesso. Per questo ho dovuto implementare la funzione XOR presenta in compilatori piu completi . Comunque ha tutto quello che si chiede ad un Pascal essenziale.
Per quanto riguarda la funzione RC4 invece, ha il duplice scopo di crittare e decrittare la stringa ;come mostrato nel codice :
Spero di esserti stato d'aiutocodice:a:='Stringa da criptare'; b:='key'; c:=RC4(a,b); {* Critta la stringa *} writeln('Stringa criptata'); writeln(c); writeln('Stringa decriptata'); writeln(RC4(c,b)); {* Decritta la stringa *}![]()
Grazie. Sapresti comunque aiutarmi su quel codice di decriptazione sul programma che avevo postato prima?
code:
Program cript;
uses crt;
var s:string;
i:integer;
begin
writeln('inserisci il messaggio da criptare');
readln(s);
for i:=1 to Length(s) do
Write((ord(s[i]))*2,'0');
repeat until keypressed;
end.
![]()
x creare il codice che decripta in questo caso è un po' più complesso perche scrivendo una sequenza di cifre non distingui i vari codici ascii ... forse risolveresti utilizzando gli array!
solo che il problema di questo codice è che posso scegliere solo un numero fisso di valori ascii (in questo caso 10) .. prova se ti va benecodice:Program decriptare; uses crt; const max = 10; type ascii = array[1..max] of integer; var valori: ascii; i: integer; s: array[1..max] of char; begin ClrScr; writeln('Inserisci la sequenza di codici ascii: '); for i:=1 to max do begin read(valori[i]); s[i]:=chr(valori[i]); end; writeln(s); repeat until keypressed; end.![]()
Non si puo dire al computer: leggi una sequenza di numeri finchè non trovi un punto.
Così da poter dividere le sequenze di cifre ascii?
Originariamente inviato da lomiz
Grazie. Sapresti comunque aiutarmi su quel codice di decriptazione sul programma che avevo postato prima?Comunque tengo a sottilineare che , in generale, la sicurezza di un codice dovrebbe dipendere esclusivamente dalla segretezza della chiave e non da quella dell'algoritmo . Nel tuo caso il codice dipende solo dall'algoritmo , per cui , non è sicuro .codice:program decrit; var s,d,tmp:string[255]; i,j,l,k,m,n:integer; flag:boolean; begin writeln('Inserisci la stringa da decrittare'); readln(s); d:=''; l:=Length(s); i:=1; while i<l do begin j:=i; tmp:=''; flag:=TRUE; while flag do begin if s[j]<>'0' then begin tmp:=tmp+s[j]; j:=j+1; end else begin if s[j+1]='0' then begin tmp:=tmp+s[j]; j:=j+2; end else j:=j+1; flag:=FALSE; end; end; i:=j; n:= Length(tmp); m:=0; for k:=1 to n do m:=m+(ord(tmp[k])-48)*(10 Pow (n-k)); m:=m div 2; d:=d+Chr(m); end; writeln('La stringa decrittata è:'); writeln(d); end.![]()
penso che non si può fare così perche i numeri ascii sono di tipo "integer" mentre il punto è di tipo "char"Originariamente inviato da lomiz
Non si puo dire al computer: leggi una sequenza di numeri finchè non trovi un punto.
Per king 64:
ma cosa significa "pow" .. c'è un errore o significa qualcosa?codice:m:=m+(ord(tmp[k])-48)*(10 Pow (n-k));