Ik ben momenteel bezig met het schrijven van een perl scripje dat geëncrypted moet kunnen communiceren tussen twee pc's. Hiervoor maak ik gebruik van een socket en de Rijndael opties in perl. Dit werkt al aardig alleen zit ik nog met een aantal probleempjes waar ik niet helemaal uit kom. Misschien dat één van jullie mij in de goede richting kan helpen.
Ik heb het zover dat ik text geëncrypted over kan zenden, dit gaat alleen gedeeltelijk goed, de eerste regel gaat helemaal goed, deze kan helemaal worden gelezen. Bij de tweede regel gaat het echter fout, deze kan maar een gedeelte gelezen worden. Zie:
Het is de bedoeling dat de client een commando (text) naar de server stuurt waarop de server weer iets terug stuurt naar de client. Dit moet allemaal geëncrypt gebeuren voor de veiligheid. Naast het versturen van text moet hij uiteindelijk ook binare gegevens geencrypt gaan versturen.
Huidige script:
Server.pl:
Client.pl:
Ik heb het zover dat ik text geëncrypted over kan zenden, dit gaat alleen gedeeltelijk goed, de eerste regel gaat helemaal goed, deze kan helemaal worden gelezen. Bij de tweede regel gaat het echter fout, deze kan maar een gedeelte gelezen worden. Zie:
code:
1
2
3
4
| Socked open Hoi dit is een testje... ®H¬¶JSê8¾¬weede testje... Socked close |
Het is de bedoeling dat de client een commando (text) naar de server stuurt waarop de server weer iets terug stuurt naar de client. Dit moet allemaal geëncrypt gebeuren voor de veiligheid. Naast het versturen van text moet hij uiteindelijk ook binare gegevens geencrypt gaan versturen.
Huidige script:
Server.pl:
Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| use IO::Select; use IO::Socket; use Crypt::Rijndael; # Create new Crypt::Rijndeal object $cipher = new Crypt::Rijndael "keyhere", Crypt::Rijndael::MODE_CBC; # Create new Socket object on port $port my $socket = new IO::Socket::INET ( LocalPort => '65121', Proto => 'tcp', Listen => 1, Reuse => 1, ); die "Could not create socket: $!\n" unless $socket; # Allow multiple connection with new IO::Select object $mulserver = new IO::Select(); $mulserver->add($socket); while(1){ #select() blocks until a socket is ready to be read ($server) = IO::Select->select($mulserver,undef,undef,0); #We now have at least one readable handle. foreach $sock (@$server){ if ($sock == $socket){ $new_sock = $sock->accept(); #new connection, add to list, May not be readable yet. $mulserver->add($new_sock); print "Socked open\n"; } else { #check to see if socket closed $buf = <$sock>; if($buf) { #print length($buf) . "\n";; print $cipher->decrypt($buf); } else { #socket was closed print "Socked close\n"; $mulserver->remove($sock); close($sock); } } } } |
Client.pl:
Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| use IO::Socket; use Crypt::Rijndael; $cipher = new Crypt::Rijndael "keyhere", Crypt::Rijndael::MODE_CBC; my $sock = new IO::Socket::INET ( PeerAddr => 'localhost', PeerPort => '65121', Proto => 'tcp', ); die "Could not create socket: $!\n" unless $sock; print $sock $cipher->encrypt(get16("Hoi dit is een testje...\n")); print $sock $cipher->encrypt(get16("Tweede testje...\n")); close($sock); #this sub makes all data blocksize of 16 bytes. sub get16 { my $data = shift; return "\0" x ( 16 - length($data)%16 ) . $data; } |
huh, heb ik dat gedaan?