Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [PASCAL] Programma per criptare e decriptare testi

    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.

  2. #2
    Utente di HTML.it L'avatar di mico
    Registrato dal
    Jul 2005
    Messaggi
    140
    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!

  3. #3
    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.

  4. #4
    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

  5. #5
    Originariamente inviato da lomiz
    -Che differenza c'è tra il pascal e il pascalx?
    Il PascalX è un compilatore Pascal che compila in modalità console .
    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 :

    codice:
      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 *}
    Spero di esserti stato d'aiuto

  6. #6
    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.


  7. #7
    Utente di HTML.it L'avatar di mico
    Registrato dal
    Jul 2005
    Messaggi
    140
    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!

    codice:
    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.
    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 bene

  8. #8
    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?

  9. #9
    Originariamente inviato da lomiz
    Grazie. Sapresti comunque aiutarmi su quel codice di decriptazione sul programma che avevo postato prima?
    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.
    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 .

  10. #10
    Utente di HTML.it L'avatar di mico
    Registrato dal
    Jul 2005
    Messaggi
    140
    Originariamente inviato da lomiz
    Non si puo dire al computer: leggi una sequenza di numeri finchè non trovi un punto.
    penso che non si può fare così perche i numeri ascii sono di tipo "integer" mentre il punto è di tipo "char"

    Per king 64:
    codice:
        m:=m+(ord(tmp[k])-48)*(10 Pow (n-k));
    ma cosa significa "pow" .. c'è un errore o significa qualcosa?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.