Siechfred: Invalid length key (Crypt::Blowfish)

Guten Abend,

wieder einmal versuche ich mich durch Perl zu wühlen und bin dabei auf folgendes Problem gestoßen:

Das Script sieht wie folgt aus:

#!/usr/bin/perl -w
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use Crypt::Blowfish;

$query = new CGI;
$stringtocrypt = $query->param('pwd');
@chars = (0..9, 'A'..'Z', 'a'..'z');
$key_str = "";
$i = 1;

for($i < 16) {
  $n = int(rand(62)+1);
  $key_str = $key_str.$chars[$n];
  $i++;
}

$key = pack("b8", "01234567");
$cipher = new Crypt::Blowfish $key;
$ciphertext = $cipher->encrypt($stringtocrypt);

Wenn ich das Script ausführe, kommt die Fehlermeldung, dass der Key nicht die richtige Länge habe. Wo liegt das Problem?

mfg Torsten

--
Opinions are like assholes: everybody has one.
ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
  1. Guten Abend,

    kleiner Nachtrag.

    $key = pack("b8", "01234567");

    Ich vermute, dass hier das Problem liegt, denn $key muss 8 bit haben. Ich haben es auch schon mit dem Beispiel aus der Dokumentation zum Modul versucht:

    $key = pack("H16", "0123456789ABCDEF");

    Aber die Fehlermeldung blieb die gleiche.

    mfg Torsten

    --
    Opinions are like assholes: everybody has one.
    ss:| zu:| ls:# fo:| de:[ va:| ch:? n4:& rl:? br:& js:| ie:% fl:( mo:}
    1. Guten Morgen,

      vielleicht sollte ich dir Frage etwas konkretisieren:

      $key = pack("H16", "0123456789ABCDEF");

      1. Weiß jemand, welcher Datentyp $key sein muss?
      2. Woran erkenne ich, dass ein String eine Länge von 8 bit hat?

      mfg Torsten

      1. Moin Moin !

        Guten Morgen,

        vielleicht sollte ich dir Frage etwas konkretisieren:

        $key = pack("H16", "0123456789ABCDEF");

        1. Weiß jemand, welcher Datentyp $key sein muss?
        2. Woran erkenne ich, dass ein String eine Länge von 8 bit hat?

        mfg Torsten

        Aus der Doku:

        my $key = pack("H16", "0123456789ABCDEF");  # min. 8 bytes
         my $cipher = new Crypt::Blowfish $key;
         my $ciphertext = $cipher->encrypt("plaintex"); # SEE NOTES
         print unpack("H16", $ciphertext), "\n";

        8 Bytes in Hex-Darstellung (H-Argument) sind 16 Hex-Ziffern, sprich: ein 16 Zeichen langer String.

        $key enthält mind. 8 Bytes binäre Daten, siehe pack in perlfunc.

        Alexander

        --
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"