PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 27/06/2009 21:36:07

Tackichi
Membre

Type de colonne pour des données chiffrés

Bonjour,
Je travaille actuellement sur un site d'une communauté des jeux électroniques , j'ai réalisé un système d'inscription,  le mot de passe est crypté pour garder une certaine confidentialité, or, quand j'envoie les données vers la base (BDD) une erreur se propage indiquant que l'encodage des caractères n'est pas supporté par le type de la colonne  "mot_passe".
Le problème survient sûrement du cryptage de mot de passe.
Voici l'erreur que j'obtiens :
"Echec de la requête ERROR: invalid byte sequence for encoding "UTF8": 0xe4597a HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding"."
Merci à vous tous!!

Dernière modification par Tackichi (27/06/2009 21:38:24)

Hors ligne

#2 27/06/2009 22:13:47

gleu
Administrateur

Re : Type de colonne pour des données chiffrés

Ça peut venir de cette colonne comme d'une autre. Tout ce que ce message indique, c'est que vous essayez d'insérer des données dont les caractères n'existent pas en UTF-8. Si en effet, les données ne sont pas de l'UTF-8, il faut préciser l'encodage grâce au paramètre client_encoding.


Guillaume.

Hors ligne

#3 28/06/2009 01:04:29

Tackichi
Membre

Re : Type de colonne pour des données chiffrés

Merci,
je sais que le message d'erreur indiqué survient de la colonne mot_passe parce que quand je désactive le cryptage à partir du script php les données sont insérées, malheureusement la documentation de php ne mentionne pas l'encodage retourné par le cryptage, mais elle indique que la colonne doit être en type Tinyblob ou  tinytext sur Mysql

Dernière modification par Tackichi (28/06/2009 01:19:03)

Hors ligne

#4 28/06/2009 08:22:34

Marc Cousin
Membre

Re : Type de colonne pour des données chiffrés

Est ce que l'algorithme d'encryption génère du (vrai) texte ou bien une série d'octets ?

Habituellement, les algos génèrent soit une clé binaire, qu'il sera impossible de stocker dans un champ TEXT, vu qu'il ne passera pas les contrôles, soit une version base64 ou quelque chose comme ça, qui ne contient que des caractères 'basiques' (comme A-Z,a-Z,0-9,+,=).
=> Que génère l'algo ?
Si c'est le premier cas, il faut le stocker dans un bytea (ou lui faire subir un encodage base4 avant de le mettre dans le champ text, mais ca prendra davantage de place)
Si c'est le second cas (j'en doute), ça doit marcher d'entrée.


Marc.

Hors ligne

#5 28/06/2009 13:29:00

Tackichi
Membre

Re : Type de colonne pour des données chiffrés

Merci,

Ce que je savais que le vecteur d'initialisation pour l'algorithme choisi génère une série de 8 octets soit 64 bits , alors que ces bits seront combinés avec les données (mot de passe)  pour avoir un bloc de données crypté à la forme 0xe4597a0x82 ou 0xfc .
Normalement ça doit marcher avec un type text comme vous l'avez mentionné ci-dessus, mais impossible de transmettre les données.

Hors ligne

#6 28/06/2009 13:52:06

Marc Cousin
Membre

Re : Type de colonne pour des données chiffrés

vu la forme, ca ne ressemble pas à du texte, mais à une suite d'octets. Essayez plutôt un bytea :
http://docs.postgresqlfr.org/8.4/datatype-binary.html


Marc.

Hors ligne

#7 28/06/2009 15:36:45

gleu
Administrateur

Re : Type de colonne pour des données chiffrés

Le problème n'est pas tellement de savoir si c'est du texte ou pas. À partir du moment où cela ne correspond pas à l'encodage de la base de données, vous ne pourrez pas l'enregistrer dans un champ de type text (ou varchar ou char). Donc en partant de ce principe, le mieux est de faire comme l'indique Marc : une colonne de type bytea.


Guillaume.

Hors ligne

#8 28/06/2009 19:43:52

Tackichi
Membre

Re : Type de colonne pour des données chiffrés

gleu a écrit :

Le problème n'est pas tellement de savoir si c'est du texte ou pas. À partir du moment où cela ne correspond pas à l'encodage de la base de données, vous ne pourrez pas l'enregistrer dans un champ de type text (ou varchar ou char). Donc en partant de ce principe, le mieux est de faire comme l'indique Marc : une colonne de type bytea.

Effectivement j'ai transtypé la colonne en Bytea, et j'ai protégé les caractères comme indiqué dans la doc , alors mes données sont enregistrées :d
Merci

Hors ligne

Pied de page des forums