H1N1: CBC::Crypt <> DB klappt nicht

Hallo,

ich hab nun die Verschlüssung mit dem Modul http://search.cpan.org/dist/Crypt-CBC/CBC.pm gemacht bzw. ich versuche es.

Das 0815-Beispiel klappt einwandfrei.

  
  use Crypt::CBC;  
  $cipher = Crypt::CBC->new( -key    => 'my secret key',  
                             -cipher => 'Blowfish'  
                            );  
  
  $ciphertext = $cipher->encrypt("This data is hush hush");  
  $plaintext  = $cipher->decrypt($ciphertext);  

Nun will ich die verschlüsselten Daten in einer DB ablegen und gehe wie folgt vor:

my $key = "x";  
my $cipher = Crypt::CBC->new( -key    => $key,  
                             -cipher => 'Blowfish'  
                            );  
my $ciphertext = $cipher->encrypt($plaintext);  
$ciphertext = encode('UTF-8', $ciphertext);  
my $sql = qq{INSERT INTO data (data) VALUES (?));

Das klappt ebenfalls.

Was aber nicht klappt ist das entschlüsseln der Daten:

  
$main::dbh->do("set character set utf8");  
$main::dbh->do("set names utf8");  
DB Abfrage für ciphertext (die erfolgreich ist) ...  
$ciphertext = decode('UTF-8', $ciphertext);  
my $key = "x";  
my $cipher = Crypt::CBC->new( -key    => $key,  
                             -cipher => 'Blowfish'  
                            );  
my $plaintext  = $cipher->decrypt($ciphertext);  

Ergebnis:
In $plaintext steht Müll drin, also weder der orginale Plaintext nocht der Ciphertext.

Jemand eine Idee?

ciao
H1N1

  1. Info:
    Der Wert in $ciphertext entspricht einem anderen wie in der DB und ist identisch wie $plaintext nach dem decrypt.

    Ich blicks nicht.

    1. Info:
      Der Wert in $ciphertext entspricht einem anderen wie in der DB und ist identisch wie $plaintext nach dem decrypt.

      Ich blicks nicht.

      Das der Ciphertext anders dargestellt wurde lag an HTML::Entities::encode_entities. Daher gilt wieder, dass der $ciphertext, welcher aus der Datenbank rauskommt identisch zu dem ist, der drin war bzw rein gekommen ist ;) Und er ist ebenfalls anderst als $plaintext. Puh immerhin, aber dennoch bleibt das Problem, dass $plaintext nicht mein Orginaltext ist.

      1. Ich hab doch noch was entdeckt ...

        Wenn ich den Ciphertext ausgebe bevor ist es in die DB speichere sieht er so aus:

        Vor UTF8 encoding:
        Salted__mist-das-forum-laesst-keine-komischen-Zeichen-zu
        UTF8
        Salted__mist-das-forum-laesst-keine-komischen-Zeichen-zu-UTF8

        In der DB und nach der Abfrage als Ausgabe steht aber:
        UTF8
        Salted__mist!das!forum!laesst!keine-komischen-Zeichen-zu-UTF8
        Nach decoding
        Salted__mist!das!forum!laesst!keine-komischen-Zeichen-zu

        Ich glaub ich hab Kodierungs-Problem?!

  2. Hallo,

    Nun will ich die verschlüsselten Daten in einer DB ablegen und gehe wie folgt vor:

    my $key = "x";

    my $cipher = Crypt::CBC->new( -key    => $key,
                                 -cipher => 'Blowfish'
                                );
    my $ciphertext = $cipher->encrypt($plaintext);
    $ciphertext = encode('UTF-8', $ciphertext);
    my $sql = qq{INSERT INTO data (data) VALUES (?));

      
    das ist Unsinn, [wie ich Dir bereits erklärt habe](https://forum.selfhtml.org/?t=187307&m=1244846).  
      
    Speichere Binärdaten in einer Spalte angemessenen Datentyps. Speichere sie unverändert. Verfälsche sie nicht durch eine überflüssige Umkodierung nach UTF-8.  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. das ist Unsinn, wie ich Dir bereits erklärt habe.

      Speichere Binärdaten in einer Spalte angemessenen Datentyps.

      Ok, also sind die verschlüsselten Daten von Crypt::CBC als Binärdaten zu behandeln. Das wusste ich nicht.