Newsgroup: it.comp.sicurezza.crittografia
Titolo: Crittografare numeri in numeri

Salve a tutti.
Ho un problema che non so risolvere. Ho bisogno di codificare una sequenza
numerica in un'altra sequenza numerica. Mi spiego meglio.
Supponiamo di aver acquisito la seguente sequenza:
  192 168 123 243 443 109
Vorrei che questa sequenza venisse codificata in un'altra sequenza anch'essa
numerica.
Ho fatto quanto segue per la codifica
@data = (192,168,123,243,443,109);
push(@data,sum(@data) % 255) # calcolo il CRC
my $cipher = Crypt::CBC->new({key => "password",
			      iv => "01234567",
                              prepend_iv => 0,
                  	      cipher => "Blowfish"});
my $ciphertext = $cipher->encrypt(pack("C*",@data));
my @cipherpack = unpack("C*",$ciphertext);
Usando le funzioni pack e unpack con "C*" riesco ad ottenere una sequenza
numerica da quella di partenza. Purtroppo però se tra i numeri della
sequenza se ne trova almeno uno maggiore di 255, il calcolo del CRC in fase
di decodifica risulta errato.
In fase di decodifica ho fatto quanto segue:
my $cipherd = Crypt::CBC->new({key => "password",
			       iv =>"01234567",
                               prepend_iv => 0,
		               cipher => "Blowfish"});
my $cfrtext_rev = pack("C*",@cipherpack);
my @datad = unpack("C*",$cipherd->decrypt($cfrtext_rev));
print "CRC ok\n" if (sum(@datad[0..@datad-2])%255)==$datad[-1];
Qualcuno ha qualche suggerimento (oppure un metodo alternativo) su come
posso risolvere questo problema e fare in modo che la sequenza acquisita
possa contenere numeri maggiori di 255?
Grazie a tutti
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
mythos73 wrote:
| Salve a tutti.
| Ho un problema che non so risolvere. Ho bisogno di codificare una sequenza
| numerica in un'altra sequenza numerica.
Non vorrei rompere i tuoi sogni, ma *tutta* la crittografia oggi in uso
funziona su "numeri".. in fondo anche se sembrano lettere o immagini,
alla fine solo solo sequenze di numeri, no? 0=)
| @data = (192,168,123,243,443,109);
| push(@data,sum(@data) % 255) # calcolo il CRC
| my $cipher = Crypt::CBC->new({key => "password",
| 			      iv => "01234567",
|                               prepend_iv => 0,
|                   	      cipher => "Blowfish"});
OK, blowfish è un buon algoritmo.
Io avrei usato direttamente AES, ma blowfish va benissimo.
| Purtroppo però se tra i numeri della
| sequenza se ne trova almeno uno maggiore di 255, il calcolo del CRC in
fase
| di decodifica risulta errato.
Certo, perché quei "numeri" altro non sono che una sequenza di byte.
Se vuoi avere numeri, invece che in (0,255), maagri in (0,65535) non ti
resta che prendere i byte in parole di 2 byte (in pratica leggerli due
alla volta).
Se ti servono numeri ancora maggiori puoi prendere parole di 3, 4 o più
byte.
| print "CRC ok\n" if (sum(@datad[0..@datad-2])%255)==$datad[-1];
Certo che.. usi un ottimo algoritmo crittografico e poi ti accontenti di
un checksum?
Peraltro io direi "Checksum ok", perché il CRC è un check più "preciso"
del checksum, quindi l'informazione che dai è falsata...
Ciao, Lapo
- --
L a p o   L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /
http://www.megatokyo.it
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (Cygwin)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAj+w++gACgkQaJiCLMjyUvtFZQCgj+w3eS+Ork1K/rLSqWDB++Y4
uxsAnj46FaZybt2VCIQJmw2sSj2h3uNR
=Bs4I
-----END PGP SIGNATURE-----

Potresti dirmi cortesemente come faccio a prendere i byte in parole di 2
byte, cioè come dico allo script come leggere i byte due alla volta?
Grazie


 byte, cioè come dico allo script come leggere i byte due alla volta?
No, non so nulla di perl.
Comunque il cuore della questione è molto banale:
word = (a << 8) | b
a = (word >> 8) & 0xFF
b = word & 0xFF
Dove:
<< shift a sinistra
 >> shift a destra
|  or bit-a-bit
&  and bit-a-bit
