PDA

View Full Version : [C]Algoritmo di critografia


Metal2001
19-05-2010, 16:06
Sto cercando di fare un programma simile a questo,si tratta della crittografia secondo l'algoritmo aes

http://www.hoozi.com/post/829n1/advanced-encryption-standard-aes-implementation-in-c-c-with-comments-part-1-encryption

Solo che questo è in c++ e io dovrei farlo in c solo che ci sono parecchie cose che non mi sono chiare

1)nelle righe 38 e 62 cosa costruisce?sono due array di int ma gli elementi non mi sembrano int
2)nella riga 206 non capisco cos'è,dice che è una macro che fa il prodotto di 2 con il modulo,ma non ho capito bene cos'è esattamente e se è la causa per cui il programma funziona solo se compilo con g++ e non gcc
3)da 220 a 224 fa delle operazioni con il simbolo ^,che cos'è?mi verrebbe da dire l'elevazione a potenza ma è messo anche a sinistra di un uguale quindi non può essere
4)righe 302,325 e 341,prende da tastiera degli esadecimali,come mai mette %02x nel printf?non ho mai lavorato con gli esadecimali in c

Quali sono le istruzioni che mi impediscono di complilare con gcc?E' possibile che il problema dipende dal fatto che uso gcc su un mac?
Tempo fa avevo fatto un programma in c che su mac non compilava mentre su ubuntu funzionava perfettamente

Grazie

fero86
19-05-2010, 20:14
1)nelle righe 38 e 62 cosa costruisce?sono due array di int ma gli elementi non mi sembrano int si che lo sono: sono scritti in esadecimale, cioé in base 16.


2)nella riga 206 non capisco cos'è,dice che è una macro che fa il prodotto di 2 con il modulo,ma non ho capito bene cos'è esattamente e se è la causa per cui il programma funziona solo se compilo con g++ e non gcc non so tu ma io non sono mai riuscito a compilare con gcc un programma scritto in C++, ho sempre dovuto usare g++, quindi la macro non c'entra: che del codice C++ non compili con gcc a questo punto lo do' per scontato e non mi interessa conoscere il motivo, l'importante é che con g++ funzioni :D

per quanto riguarda la macro, non é scritta benissimo ma il significato mi sembra palese, serve a fare due conti sul valore di x che non ho idea di cosa servano perché non conosco AES. l'operatore << fa lo shift a sinistra, cioé moltiplica per 2 elevato alla potenza indicata dal secondo operando; l'operatore >> fa lo shift a destra, cioé divide per 2 elevato alla potenza indicata; l'operatore ^ é il bitwise XOR (fa lo XOR bit a bit); ed infine l'operatore & é il bitwise AND.


3)da 220 a 224 fa delle operazioni con il simbolo ^,che cos'è?mi verrebbe da dire l'elevazione a potenza ma è messo anche a sinistra di un uguale quindi non può essere il bitwise XOR, come detto prima. il bitwise XOR ha importanza cruciale nelle operazioni crittografiche perché offre segretezza perfetta (la distribuzione dei ciphertexts é indipendente da quella dei plaintexts).

quando é messo vicino ad un uguale si ottiene l'operatore composto ^=
il significato dell'operatore composto é il seguente: questa espressione:

a ^= b;

é precisamente equivalente a questa:

a = a ^ b;

Metal2001
20-05-2010, 07:46
si che lo sono: sono scritti in esadecimale, cioé in base 16.


non so tu ma io non sono mai riuscito a compilare con gcc un programma scritto in C++, ho sempre dovuto usare g++, quindi la macro non c'entra: che del codice C++ non compili con gcc a questo punto lo do' per scontato e non mi interessa conoscere il motivo, l'importante é che con g++ funzioni :D

per quanto riguarda la macro, non é scritta benissimo ma il significato mi sembra palese, serve a fare due conti sul valore di x che non ho idea di cosa servano perché non conosco AES. l'operatore << fa lo shift a sinistra, cioé moltiplica per 2 elevato alla potenza indicata dal secondo operando; l'operatore >> fa lo shift a destra, cioé divide per 2 elevato alla potenza indicata; l'operatore ^ é il bitwise XOR (fa lo XOR bit a bit); ed infine l'operatore & é il bitwise AND.


il bitwise XOR, come detto prima. il bitwise XOR ha importanza cruciale nelle operazioni crittografiche perché offre segretezza perfetta (la distribuzione dei ciphertexts é indipendente da quella dei plaintexts).

quando é messo vicino ad un uguale si ottiene l'operatore composto ^=
il significato dell'operatore composto é il seguente: questa espressione:

a ^= b;

é precisamente equivalente a questa:

a = a ^ b;

Ovviamente il compilatore C non funziona con i programmi scritti in c++,ma io vorrei sapere quali sono le istruzioni che rendono questo programma un programma in c++ perchè io dovrei svilupparlo in c.Sapendo le istruzioni esclusive del c++ vedo di trovarne delle equivalenti in c e le sostuisco

purtroppo per me non ho mai avuto a che fare con le macro,comunque ora so cosa cercare per capire meglio questo codice

grazie