Newsgroup: it.comp.lang.delphi
Titolo: Decryptare

Con la procedura di cui sotto crypto un file di testo e ottengo la seguente 
stringa:
o[¡ù<Y-ñc½(Hdâ+ÃÜb
ora vorrei che se si cancella l'ultimo simbolo (in questo caso b) o SOLO 
anche uno dei simboli,la decryptazione non fosse possibile o fosse molto 
confusa.
Qualcuno mi puo' aiutare?
Grazie
Luigi
 procedure EnDecryptFile(pathin, pathout:string;Chiave:integer);
var
  InMS, OutMS: TMemoryStream;
  cnt: Integer;
  C: byte;
begin
  InMS  := TMemoryStream.Create;
  OutMS := TMemoryStream.Create;
  try
    InMS.LoadFromFile(pathin);
    InMS.Position := 0;
    for cnt := 0 to InMS.Size - 1 DO
      begin
        InMS.Read(C, 1);
        C := (C xor not (ord(chiave shr cnt)));
        OutMS.Write(C, 1);
      end;
    OutMS.SaveToFile(pathout);
  finally
    InMS.Free;
    OutMS.Free;
  end;
end;

 fosse molto confusa.
Aggiungi dei caratteri di checksum e verificali prima di eseguire la
procedura di decryptazione.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista Delphi?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

Ti ringrazio per la risposta,ma non so come aggiungere i caratteri che mi 
hai indicato,potresti farmi un esempio?
Grazie molte
Luigi


 che mi hai indicato,potresti farmi un esempio?  
Farti un esempio significherebbe progettare ed implementare la
soluzione. Se non sai cos'e' un checksum, apri Google e cerca.
P.S.
Per favore, 
http://wiki.news.nic.it/QuotarBene


 
Prendendo spunto dalla tua procedura ho buttato giu' una piccola 
modifica dove potresti iniziare a lavorarci
In pratica la variabile chk è un conatore che viene incrementato e 
salvato in coda al file, poi viene riletto e decrementato se arriva a 0 
tutto ok altrimenti c'e' stata manomissione, l'esempio mi sembra molto 
terra terra ma credo che renda l'idea del checksum che ti ha dato 
Filippo Toso
procedure EnDecryptFile(pathin, pathout:string;Chiave, nAzione:integer);
(****************************************
* nAzione = 0 il file viene criptato    *
* nAzione = 1 il file viene decriptato  *
*****************************************)
var
  InMS, OutMS: TMemoryStream;
  cnt: Integer;
  C: byte;
  chk: Integer;
  nSize:Integer;
begin
  InMS  := TMemoryStream.Create;
  OutMS := TMemoryStream.Create;
  chk := 0;
  try
    InMS.LoadFromFile(pathin);
    InMS.Position := 0;
    nSize := InMS.Size - 1;
    if nAzione=1 then
    begin
      InMS.Position := InMS.Size - SizeOf(chk);
      InMS.Read(chk, SizeOf(chk));
      InMS.Position := 0;
      nSize := InMS.Size - 1 - SizeOf(chk);
    end;
    for cnt := 0 to nSize DO
      begin
        InMS.Read(C, 1);
        if nAzione=1 then
          chk := chk-C;
        C := (C xor not (ord(chiave shr cnt)));
        if nAzione=0 then
          chk := chk+C;
        OutMS.Write(C, 1);
      end;
    if nAzione=0 then
    begin
      OutMS.Write(chk, SizeOf(chk));
      OutMS.SaveToFile(pathout);
    end;
    if nAzione=1 then
    begin
      if chk=0 then
        OutMS.SaveToFile(pathout)
      else
        ShowMessage('File corrotto');
    end;
  finally
    InMS.Free;
    OutMS.Free;
  end;
end;
Goblin
-- 
Ibis et redibis non morieris in bello
http://goblinland.myminicity.com/

 confusa.
Usare qualcosa di pronto, come LockBox (ex TurboPower) disponibile su
SourceForge?
Contiene componenti per crittografia, hashing e quant'altro.
Saluti
Paolo Arosio

Ti ringrazio per la tua risposta,funziona tutto alla meraviglia,volevo solo 
sapere se è normale che salvando successivamente il file criptato tale e 
quale come l'originale,la procedura dia il messaggio da te scritto (File 
corrotto),in altre parole da come ho capito salvando (non rinominando) poi 
il file la procedura riconosce come manomesso il file
Grazie per una eventuale risposta.


 
Non credo di aver capito la tua domanda :(
cmq mi autoquoto:
In pratica la variabile chk è un contatore che viene incrementato e 
salvato in coda al file, poi viene riletto e decrementato se arriva a 0 
tutto ok altrimenti c'e' stata manomissione
Dunque se cerchi di decrittare un file senza avergli prima assegnato un 
check sicuramente esce il messaggio di "File corrotto". Non ho avuto la 
possibilità di testare la procedura in modo approfondito e sicuramente 
non per i tuoi scopi :), quindi è possibile che ci sia un baco, ma  la 
mia intenzione era di farti un esempio di come funziona l'idea del 
checksum e la procedurina che ho scritto "al volo" puo' aiutarti, magari 
con il debug passo passo, per poi implementarti qualcosa di personale e 
magari piu' evoluto e che faccia al caso tuo.


Ti ringrazio di nuovo per la risposta.
Cerco di essere piu' chiaro,ripeto tutto funziona,se decripto il file OK,se 
invece prima di decriptarlo lo salvo tale e quale l'originale con lo stesso 
nome,e poi lo decripto,il file viene considerato come corrotto.
Comunque di nuovo grazie.
Luigi Paolo 

Chiedo scusa,ma non mi sono spiegato bene,dunque:
cripto il file e tutto e' OK
apro con un editor di testo il file criptato,senza modificarlo 
lo salvo tale e quale con lo stesso nome,
decripto il file e mi da' "File corrotto"
se invece non lo salvo(vedi prima)tutto OK.
In pratica salvando il file e' come fosse stato manomesso,
probabilmente deve essere cosi' per forza.
Grazie
Luigi Paolo

 tale e quale con lo stesso nome,
Probabilmente nel momento del salvataggio il tuo editor inserisce e/o 
modifica qualche cosa dentro il file, e a questo punto, ovviamente il 
check non è piu' rispettato
