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

C# Discussion :

CryptographicException: Longueur incorrecte


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Par défaut CryptographicException: Longueur incorrecte
    Bonjour,

    Je suis en train de développer une classe utilitaire générique pour crypter des données en m'appuyant sur les classes du Framework 2.

    Je dispose de deux méthodes: une pour crypter un tableau de bytes et une pour crypter un stream (cette dernière se sert de la première une fois le stream copié dans un tableau de bytes).

    Cependant quand j'appelle la première méthode avec par exemple un string converti en byte[] via Encoding.UTF8.GetBytes tout fonctionne. Mais quand j'appelle cette même méthode à partir de la seconde (donc depuis un stream considéré comme binaire; dans mon cas: un fichier) une CryptographicException ("Longueur incorrecte") surgit.

    Pour infos, j'utilise une clef de 1024 bits, les clefs publiques et privées sont générées et récupérées via ToXmlString(false) et ToXmlString(true) respectivement. Et j'injecte bien la clef publique au crypto provider au moment du cryptage. Voici le code:

    La première méthode (byte[]):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    /// <summary>
            /// Encode a byte array.
            /// </summary>
            /// <returns></returns>
            public override byte[] Encode(byte[] data) {
                byte[] results = null;
     
                InitializeAlgorithm();
     
                _AsymAlgorithm.FromXmlString(_PublicKey);
     
                if (_AsymAlgorithm is RSACryptoServiceProvider) {
                    results = ((RSACryptoServiceProvider)_AsymAlgorithm).Encrypt(data, true);
                }
     
                return results;
            }
    La seconde (stream):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /// <summary>
            /// Encode a stream.
            /// </summary>
            public override void Encode(Stream stream, Stream output) {
                byte[] data = new byte[stream.Length];
     
                BinaryReader br = new BinaryReader(stream);
                data = br.ReadBytes(data.Length);
                br.Close();
     
                BinaryWriter bw = new BinaryWriter(output);
                bw.Write(Encode(data));
                bw.Close();
            }
    Apparemment le comportement change quelque peu (mais toujours une exception) lorsque je passe le paramètre foAEP (le second) de la méthode Encrypt à false.

    S'agit-il réellement d'un problème de taille de clef ? Ou bien s'agit-il du stream en entrée (qui pour infos fait 426697 octets de long) ?

    Merci bcp pour votre aide !!

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu aurais le message d'erreur exact de l'exception ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2002
    Messages : 8
    Par défaut
    Le message au complet est "CryptographicException: Longueur incorrecte" (il n'y a pas plus d'infos dans la propriété Message de l'exception), la fin de la stacktrace est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       à System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
       à System.Security.Cryptography.Utils._EncryptPKWin2KEnh(SafeKeyHandle hPubKey, Byte[] key, Boolean fOAEP, Int32& hr)
       à System.Security.Cryptography.RSACryptoServiceProvider.Encrypt(Byte[] rgb, Boolean fOAEP)
       à Proto.Core.Profiles.AsymmetricProfile.Encode(Byte[] data) dans D:\Brice\Projets\Proto\Code\Proto\Proto Core\Profiles\AsymmetricProfile.cs:ligne 118


    Merci d'avance pour ton aide !

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Si tu debugges en mode pas à pas, sur quelle ligne survient l'erreur ?

Discussions similaires

  1. [Centura 2000] Longueur de chaîne ou de mémoire tampon incorrecte
    Par daydream123 dans le forum Autres langages
    Réponses: 6
    Dernier message: 25/03/2014, 10h49
  2. [ODBC] Erreur Longueur d'instruction incorrecte., SQL state S1090 in SQLExecDirect
    Par kamnouz dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 09/09/2011, 15h29
  3. Longueur d'instruction incorrecte., SQL state S1090
    Par kamnouz dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/09/2011, 15h19
  4. Pb longueur de blob incorrecte...?
    Par korntex5 dans le forum Access
    Réponses: 6
    Dernier message: 10/01/2006, 14h05

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