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[]):
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
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; }
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.
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(); }
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 !!![]()
Partager