CBC::Crypt <> DB klappt nicht
H1N1
- perl
0 H1N10 Vinzenz Mai0 H1N1
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
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.