IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[Oracle] Problême de chaine modifiée


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut [Oracle] Problême de chaine modifiée
    Bonjour, j'ai un problême avec une chaine de caractère sous Oracle et je voudrais savoir si quelqu'un peut m'aider:
    Je voudrai stocker une chaine de caractère provenant d'un hash et d'un XOR (oui je sais c'est tordu), et la stocker dans une table java en vu de défaire le XOR à la sortie pour retrouver la chaine d'origine.
    En gros ça donne ça:
    String a="bonjour"
    String b="je vais etre hashe"

    Je hash b avec messageDigest sur l'algo SHA-256 => je récupère un tableau de bytes que je stocke dans la String c avec new String(byte[])
    Je XOR a et c => je stocke dans la String d
    Je stocke d dans une base Oracle dans une colonne de type VARCHAR(32), d étant une chaine de caractère complètement pourrie mais là n'est pas la question ce qui m'interesse étant son tableau de byte correspondant

    Plus tard, je récupère d, et là, attention mesdames et messieurs, devant vos yeux ébahis: ce n'est plus la même chaine!!!
    Et encore ce n'est pas le plus étrange, je travaille sous eclipse, et dans la console, les lettres CHANGENT AU FUR ET A MESURE QUE JE LES SELECTIONNE !!!! si je fais un copier collé dans l'éditeur c'est pareil
    A mon avis j'ai un sérieux problême d'encodage des caractères, ma question est donc la suivante: comment stocker un tableau de byte en Oracle en brut, sans que celui-ci ne change quoi que ce soit?
    Merci de m'aider parce que j'ai tout essayé (en passant par RAW de oracle.sql.RAW ou par un BigInteger), mais je dois mal m'y prendre

    PS: Si malgré tout je persiste dans mon dexorage, je retrouve une chaine de caractère s'apparentant à celle d'origine ("bonjour"), mais avec plein de petits carrés devant et certains caractères modifiés. Ces petits carrés se modifiant également lorsque je les sélectionne dans l'éditeur d'Eclipse (c'est pas évident à décrire visuellement, en gros certains disparaissent mais pas tous non plus)

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Pas facile de répondre à ta question avec les éléments que tu donnes ...
    Mais attention, byte[] n'est pas équivalent à String ! La conversion passe par un encoding. Toutes les String possède un équivalent en tant que byte[] dans un encoding donné. Cependant, l'inverse n'est pas vrai.
    Donc la "chaîne" correspondant au hash et la "chaîne" correspondant au xor peuvent n'avoir aucun sens !

    Si tu veux garder ta logique, je ne travaillerais que avec des tableaux d'octets pour c et d (jamais de String, sauf pour le départ a et b), et je stockerais en base sous forme de blob.

  3. #3
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Problème résolu:
    J'envoie les données comme tableau de bytes avec un PreparedStatement et setBytes dans une colonne de type RAW(32), et je les récupère avec un InputStream et wala!
    Du coup je ne m'ennuie plus avec les String qui étaient effectivement la source de mes problêmes (soir l'envoi de String sur le réseau soit la manière dont Oracle les stocke puis les retransmet), je traite directement des données hexadécimales

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Non non ce n'est ni la faute du réseau ni d'Oracle, mais comme je te le disais il n'y a simplement pas équivalence entre un tableau d'octets et une String dans tous les encoding...

    N'oublie pas de marquer le problème comme résolu

Discussions similaires

  1. [Oracle 8i et ADO] Problème de chaine de connexion
    Par hrezzaz dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/10/2005, 17h52
  2. [C#] [Oracle] Problème d'Update
    Par _Air_ dans le forum Windows Forms
    Réponses: 12
    Dernier message: 06/04/2005, 13h56
  3. [C#] [Oracle] Problème de chaine de connexion
    Par didoboy dans le forum ASP.NET
    Réponses: 9
    Dernier message: 08/01/2005, 11h32
  4. Problème de chaine sur une page HTML
    Par Kerod dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2004, 16h23
  5. [PowerBuilder/Oracle] Problème de procedure stockée
    Par delphine_lep dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 02/09/2004, 14h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo