2016-07-25 14 views
0

Ich versuche, eine Postgres-Tabelle Spalte mit meinen eigenen Algorithmen zu verschlüsseln. Ich lese rsa Schlüssel aus Datei und verschlüsseln Daten mit Algorithmen. Mein Spaltentyp ist bytea.Postgres-Spalte verschlüsseln Fehler - ungültige Byte-Sequenz für die Codierung "UTF8": 0xa3

Wenn ich versuche, verschlüsselte Daten einzufügen die Postgres gibt den folgenden Fehler:

pg_query(): Query failed: ERROR: invalid byte sequence for encoding "UTF8": 0xa3

ich einige Optionen einstellen Codierung versucht, wie im Internet gefunden, aber hat nicht funktioniert.

Ich weiß nicht, was diesen Fehler verursacht.

Antwort

0

Das Problem ist, dass Sie versuchen, binäre Daten in einer Zeichenfolge (text, character varying, & hellip;) - Spalte zu speichern.

PostgreSQL weist Daten zurück, die nicht mit der durch den Parameter client_encoding festgelegten Codierung übereinstimmen. Wenn Sie RFC 3629 studieren, werden Sie feststellen, dass in UTF-8 kein Zeichen mit 0xa3 (binär 10100011) beginnen kann.

Die Lösung besteht darin, eine Spalte des Typs bytea (Byte-Array) zu verwenden, um binäre Daten zu speichern.

+0

Ich verwende Bytea Spalte Typ .. –

+0

Konnten Sie die komplette Einfügeanweisung und Tabellendefinition anzeigen? –

0

Der markante Teil des Codes besteht aus den folgenden Zeilen:

$ec = SaferCrypto::encrypt($c, $k); 

So $ec vermutlich enthält an dieser Stelle binär. Und so ist der Rest falsch:

$query = "INSERT into enc_test values('$ec')"; 
$result = pg_query($query) or die('Query failed: ' . pg_last_error()); 

weil Sie binäre Inhalte direkt in den Text einer Abfrage zu übergeben versuchen. Der Wert muss in einer Textdarstellung codiert sein, die als Literal in die Werteklausel der Abfrage eingefügt wird.

Dies sollte mit der pg_escape_bytea() Funktion durchgeführt werden.

+0

Vielen Dank .. pg_escape_bytea() hat gearbeitet .. !! –