Newsgroup: it.comp.lang.c
Titolo: informazioni sull' operatore bit-a-bit

Salve a tutti sul mio manuale di C
ho letto la seguente informazione riguardo all' operatore
bit-a-bit :  ~
ovvero, permette opereazioni di cifratura esempio:
funzione:
/*funzione cifratura di un carattere*/
char cifra(char ch)
{
 return(~ch);
}
Ora volevo sapere se è possibile cifrare un file
per renderlo non leggibile.
Grazie a tutti
Nope

 per renderlo non leggibile.
Certo che č possibile. Devi applicare una serie di passi di questo tipo:
1. Leggi un carattere dal file.
2. Applichi ad esso una qualsiasi trasformazione che ritieni opportuna.
3. Scrivi il carattere trasformato in un altro file.
Naturalmente ci sono tantissime tecniche di cifratura e molte credo non
lavorino sui singoli caratteri ma su sequenze piů o meno lunghe.
EMG

Grazie per la risposta...
potresti farmi un esempio ?
Ciao
Nope


 EMG

 potresti farmi un esempio ?
Eccoti un semplice programmino con un paio di banalissime tecniche di
cifratura:
#include <stdio.h>
#include <stdlib.h>
char cifra( char c )
{
/*  return ( c + 128 ) % 256; */
    return c ^ 170;
}
int main()
{
    FILE *in, *out;
    int c;
    in = fopen( "testo.txt", "rb" );
    if ( in == NULL )
    {
        puts( "Errore nell'apertura del file testo.txt" );
        return EXIT_FAILURE;
    }
    out = fopen( "cifrato.txt", "wb" );
    if ( out == NULL )
    {
        puts( "Errore nell'apertura del file cifrato.txt" );
        return EXIT_FAILURE;
    }
    while( ( c = getc( in ) ) != EOF )
        putc( cifra( c ), out );
    fclose( in );
    fclose( out );
    return 0;
}
EMG

GRAZIE, finalmente ci ho capito qualcosa in piů ;-)
Grazie ancora,
Nope


 
Certo che si puo', ma ci sono diversi modi.
L'idea generale e' quella di suddividere il messaggio (il file)
in parti (1 parte, o piu' parti, ad esempio dividerlo carattere per
carattere) e di applicare una qualche trasformazione a ciascuna parte.
Un esempio banale e' quello di prendere carattere per carattere ed
aggiungere 1.
In questo modo, se il messaggio era "Ciao", diventera' "Djbp".
Un altro sistema e' quello dello XOR (o del NOT bit a bit).
Per esempio, ricordandoci che ciascun carattere e' fatto di bit,
possiamo negare ogni bit.
Il carattere 10011100 diventera' quindi 01100011.
In questo modo, a differenza di prima, l'operazione di codifica
e quella di decodifica sono esattamente identiche.
Ovviamente, pero', algoritmi di crittazione di questo tipo sono
totalmente insicuri!
Anche perche', se voglio che qualcuno mi scriva un msg criptato,
devo dargli la formula per codificare, e subito lui e' in grado
di trovare la formula per decodificare.
L'idea per creare un algoritmo efficiente e' quella di trovare
una operazione asimmetrica, che sia cioe' semplice in un verso
e difficile da fare al contrario.
Per esempio, il sistema oggi maggiormente diffuso, l'RSA, si
basa sul fatto che e' estremamente semplice moltiplicare tra loro
numeri primi (anche molto grandi), mentre e' molto, mooolto
difficile scomporre un numero in fattori primi.
Senza entrare nei dettagli, io ti do una chiave (pubblica,
nel senso che la puo' conoscere chiunque, senza che ci siano
problemi di sicurezza) e tu cripti il msg con un algoritmo (anch'esso
pubblico).
Quello che non riesci a fare, pero', e' decriptare il msg, perche'
ti servirebbero informazioni in piu' sulla chiave (i fattori primi),
oppure un sacco di tempo per trovarli :-)
Ciao!
-- 
Emanuele Cesena                 
http://www.penguinpowered.com/~ecesena
ece...@penguinpowered.com
                 Attenti all'antispam NOSPAM
 /*  Questo e' un commento.  Adoro i commenti!  */