Thread Crypt::Rijndael und die blocksize (4 answers)
Opened by styx-cc at 2007-11-25 04:11

styx-cc
 2007-11-25 20:37
#102987 #102987
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Soo, hab jetzt noch ein wenig rumgespielt und stehe vor dem naechsten Problem, welches ich nicht aleine geloest bekomme. Und zwar versuche ich Dateien zu verschluesseln, das klappt auch fast komplett, aber am Ende schneidet er mir immer ein paar Bytes weg und ich find nicht raus woran es liegt..

Code: (dl )
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
#!/usr/bin/perl
use strict;
use warnings;
use Crypt::CBC;
use Digest::MD5 qw/md5_hex/;

warn "Not enough arguments, use\naes.txt <pass> <file> <de-/encrypt>\n" if scalar @ARGV < 3;
my ($password, $file_name, $action) = @ARGV;
start_up($action, 0, $file_name);

sub start_up {
my $action = shift;
my $clean_up = shift;
my $file_name = shift;

my $is_file = -f $file_name ? 1 : 0;
return unless $is_file;
$action = $action eq 'e' ? 'encrypting' : 'decrypting';
crypto($file_name, $clean_up, $action);
}

sub crypto {
my $file = shift;
my $clean_up = shift;
my $action = shift;

my $suffix = $action eq 'encrypting' ? 'aes' : 'no';
my $cipher = Crypt::CBC->new(-key => md5_hex($password),
-cipher => 'Rijndael');
my $buffer;
my $buffer_size = 1024;
print "Begin $action $file...";
$cipher->start($action);
open(SOURCEFILE, $file) or die $!;
open DESTFILE, '>', "$file.$suffix" or die $!;
while (sysread(SOURCEFILE,$buffer,$buffer_size)) {
$buffer = $cipher->crypt($buffer);
print DESTFILE $buffer;
}
close DESTFILE;
close SOURCEFILE or die $!;
$cipher->finish;
print " done!\n";
if ($clean_up) {
#...
}
return 1;
}

Das kann man ueber die Kommandozeile aufrufen:
Code: (dl )
perl crypt.pl passwort file e

e fuer encrypt, d fuer decrypt.

Ich habs schon mit read probiert, das print DESTFILE $buffer; durch ein syswrite ersetzt etc. half alles nichts.
Vielen Dank

edit:
Hab jetzt noch einen kleinen Fehler behoben, allerdings klappt das gnaze immer noch nicht:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
  open SOURCEFILE, '<', $file or die $!;  
open DESTFILE, '>', "$file.$suffix" or die $!;
$cipher->start($action);
while ( read(SOURCEFILE, $buffer, $buffer_size) ) {
$buffer = $cipher->crypt($buffer);
syswrite(DESTFILE, $buffer, $buffer_size);
}
syswrite(DESTFILE, $cipher->finish, $buffer_size);
close DESTFILE;
close SOURCEFILE or die $!;

Hauptsächlich gehts um "syswrite(DESTFILE, $cipher->finish, $buffer_size);", um den Rest aus demPuffer auch in die Datei zu schreiben.
Pörl.

View full thread Crypt::Rijndael und die blocksize