CBC::Crypt <> DB klappt nicht
    
H1N1
    
    
      
    
  - perl
- 0 H1N1
- 0 Vinzenz Mai- 0 H1N1
 
 nicht angemeldet
 nicht angemeldetHallo,
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
Info:
Der Wert in $ciphertext entspricht einem anderen wie in der DB und ist identisch wie $plaintext nach dem decrypt.
Ich blicks nicht.
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.
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?!
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
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.