|
|
||||||
|
#1
|
|
|
|
|
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 checksum 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 checksum 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 "Checksum 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? Mi è stato suggerito di prendere i byte in parole di 2 byte (in pratica leggerli due alla volta). Qualcuno sa come posso fare questa cosa in perl? Grazie a tutti |
|
|
|
#2
|
|
|
|
|
mythos73 wrote:
> my $ciphertext = $cipher->encrypt(pack("C*",@data)); da perldoc -f pack leggo: C An unsigned char value. dunque da 0 a 254 Dunque invece che C, prova ad usare pack e unpack con il template I: I An unsigned integer value che dipenderà credo dall'architettura della macchina dunque in tempi recenti almeno 32 bit. |
|
#3
|
|
|
|
|
Già fatto, ma per i miei scopi ogni numero della sequenza deve essere
codificato in un altro numero compreso tra 0 e al massimo 65535. Grazie, comunque "Andrea Maestrutti" <maestrutti> ha scritto nel messaggio news:c6o1 mythos73 wrote: > my $ciphertext = $cipher->encrypt(pack("C*",@data)); da perldoc -f pack leggo: C An unsigned char value. dunque da 0 a 254 Dunque invece che C, prova ad usare pack e unpack con il template I: I An unsigned integer value che dipenderà credo dall'architettura della macchina dunque in tempi recenti almeno 32 bit. |
|
#4
|
|
|
|
|
mythos73 wrote:
> Già fatto, ma per i miei scopi ogni numero della sequenza deve essere > codificato in un altro numero compreso tra 0 e al massimo 65535. Usa 'pack' con 'S' (che è _esattamente_ di 16 bit). Max |
|
#5
|
|
|
|
|
Il 12 Nov 2003, 09:02, Max M <edgar> ha scritto:
> mythos73 wrote: > > > Già fatto, ma per i miei scopi ogni numero della sequenza deve essere > > codificato in un altro numero compreso tra 0 e al massimo 65535. > > Usa 'pack' con 'S' (che è _esattamente_ di 16 bit). > > Max > L'ho usato e funziona. Ringrazio tutti Alla prossima -------------------------------- Inviato via http://arianna.libero.it/usenet/ |
|
|
| Discussioni simili | |
| Buffer (void *) a cui accede byte a byte Nelle mie applicazioni mi ritrovo spesso a dover passare ad una funzione il puntatore ad un buffer in memoria. Come ho visto fare nelle varie funzioni di libreria (vedi... |
|
| come posso spostare un byte all'interno di un'altro byte? mi spiego,ho 2 byte già definiti(tipo:11110000 e 10001000)e voglio che il secondo byte entri parzialmente nel primo occupandone i primi 3 bit ,quindi con un byte risultante... |
|
| Lettura byte a byte dell'HDD Salve, Come da oggetto, avrei bisogno di leggere byte a byte ogni singolo cluster del mio HDD. Potete indicarmi se esiste una qualche libreria, un componente o quant'altro in... |
|
| [VC++.NET] prendere i singoli byte da un oggetto dword Salve, ho un oggetto dword (nello specifico un indirizzo ip preso da un campo di testo ip). Ho visto nella guida che i 4 valori dell'indirizzo vengono salvati in 4 locazioni... |
|
|
Tutti gli orari sono GMT. Attualmente sono le 10:34. | Privacy Policy
|