deve007
Messages postés14Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention25 août 2006
-
21 août 2006 à 18:53
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 2008
-
25 août 2006 à 10:02
Bonjour ,
jai un string que je doit obligatoirement convertir en tableau de Byte, cette conversion se passe mal
voici l'exemple :
jai un string :
monstring = abcdefghijkl [12]
je le converti en Byte[] :
private byte[] monTabByte ;
monTabByte = StrToByteArray(monstring);
je déclare une variable appartenant à l'API de cryptography SymmetricAlgorithm()
je doit affecter monTabByte à une variable propriétaire à la cryptography (qui représente le Vecteur d'initialisation) et qui est de type Byte []: mCSP.IV
le problème c'est que quand je trace, je trouve que la variable mCSP.IV par défaut contient un tableau de 16 élement et monTabByte ne contient que 12 !!! je sais pas coment faire face à cela, sachant que j'ai essayer de d'ajouter des bits pour atteindre les 16, mais cela me cause probleme au niveau du décryptage !
Overkill06
Messages postés16Date d'inscriptionjeudi 29 mai 2003StatutMembreDernière intervention27 septembre 2007 21 août 2006 à 19:38
La solution la plus propre pour convertir un string en tableau de byte est de passer par System.Text.
Apres il suffit de choisir l'encodage : unicode, utf8 etc...
Par exemple pour unicode tu crées un objet System.Text.UnicodeEncoding et tu appeles GetBytes
Informations :
public override int GetBytes(string s, int charIndex, int charCount, byte[ ] bytes, int byteIndex)
Membre de System.Text.UnicodeEncoding
Résumé :
Code un jeu de caractères de la chaîne System.String spécifiée dans le tableau d'octets indiqué.
Paramètres :
s: System.String contenant le jeu de caractères à coder.
charCount: Nombre de caractères à coder.
byteIndex: Index auquel commencer l'écriture de la séquence d'octets obtenue.
charIndex: Index du premier caractère à coder.
bytes: Tableau d'octets contenant la séquence d'octets obtenue.
Valeurs de retour :
Nombre réel d'octets écrits dans bytes.
Ca marche pour utf également, regarde msdn ou Explorateur d'objets fournis dans visual studio.
je vous donne une idée plus golbale sur mon sujet:
j'ai un Client et un Serveur je doit, la communication entre ces 2 entités ne doit pas passé en claire ! j'ai cherché aupres de la bibliothèque SSLStream en C#, mais il parait que c'est trop compliqué, donc, jai essayer de faire simple en cryptant les données avant de les envoyées. cette operation se fait via une variable mCSP de la bibliothèque [SymmetricAlgorithm ] en fournissant une clé de cryptage ainsi qu'un vecteur d'initialisation qui a comme role d'eviter d'avoir le meme mot, le meme code crypté.
cette clé é ce vecteur dinitialisation doivent etre les meme du coté du client et du serveur chose qui permettra a ce dernier de decrypté les elements envoyées.
c'est a ce niveau ou j'ai un probleme puisque une fois ces 2 message recu par le serveur il narrive pas a stocker le 2eme ( Vecteur d'initialisation) dans un Byte[] vu qu'il n'est pas sur 2 Octets.jespere que c'est plus claire que tout a lheure.
voici le corps de la fonction StrToByteArray: ( je pense que ca répond meme a =111463 Overkill06)
public
static
byte[] StrToByteArray(string
str)
{
System.Text.
ASCIIEncoding encoding = new System.Text.ASCIIEncoding
();
deve007
Messages postés14Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention25 août 2006 23 août 2006 à 17:31
salut,
le problème que je n'arrive tjrs pas à comprendre est le suivant :
j'ai 2 fonctions l'une crypte, la seconde decrypte.
si je met ces 2 fonctions dans le meme programme et jexecute, tout est nikel, PAR CONTRE, si je prend celle qui crypte, je l'affecte soigneusement au client ( vue que c'est lui qui va envoyer les données) puis j'intègre celle qui decrypte au niveau du serveur, ca pete !!!!! , je comprend plus rien....
et ca plante au niveau du vecteur dinitialisation :
une fois je crée un vecteur dinitialisation , je lenvoie au serveur histoire d'avoir le meme que le client qui lui permettra de décrypter la chaine que jenverrai apres! une fois recu, je le convertie a un tableau de Byte, puis je le stocke au niveau d'une variable spécifique cet effet mCSP.IV ( Initialisation Vector) qui sera utilisée par le CreateDecryptor(mCSP.Key,mCSP.IV);
et la il commence a me raconté des nulletés genre : la taille du tableau n'est pas adequate ou tableau ne doit pas etre vide sachant que quand je trace, je trouve qu'il est plein... maintenant j'ai reussit a dépassé cela mais ca plante au niveau d'une fonction
FlushFinalBlock() !!
je vous met ci dessous ma fonction qui s'occupe de decrypter la chaine envoyée par le client peut etre que ca pourrais aider à comprendre mieux mon problème :
//instanciation de SymmetricAlgorithm au début du programme serveur :
privateSymmetricAlgorithm mCSP = SymmetricAlgorithm.Create() ;// fonction de décryptage
private
string DecryptString(
string Value)
{
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
// le vecteur d'initialisation envoyer par le client, ici mis dans une variable pour faciliter la compréhension
String m_initVector =
"@1B2c3D4e5F6g7H8";
// conversion du vecteur d'initialisation a un tableau de Byte
Byte[] IVArray = StrToByteArray(m_initVector);
// affectation du tableau de Byte a la variable .IV qui sera utiliser par la fonction createDecryptor:
mCSP.IV = IVArray;
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 23 août 2006 à 17:59
Ca ne pourrais pas être a cause du "pointeur de lecture", qui ne serait pas forcément bien positionné sur le flux (par exemple s'assurer qu'il est au début avant de lire...) ?
deve007
Messages postés14Date d'inscriptionmardi 25 avril 2006StatutMembreDernière intervention25 août 2006 25 août 2006 à 08:19
non je pense pas, car avant de faire se genre de communication en crypté , je lai deja effectuer en claire, et donc le pointeur de lecture marche bien puisque je lit ce que jenvoie, par contre une fois je passe au mode crypté.. les problemes commencent!!
jai même essayer de telecharger des codes sources de cryptage/ decryptage de string, et c'est la meme histoire: si c'est ds le meme programme que ca se produit, c'est bon, mais une fois on les dispatchent sur 2 programmes... ca foire !!
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 25 août 2006 à 10:02
En relisant ce que tu as écris dans le message au dessus (avec le code), je me demande si ce n'est pas la facon dont tu transmet les info entre tes deux programmes qui pose problème...
Comment transmet tu les infos? (ce sont deux assemblies chargée ensemble et tu appelle les méthodes de l'une et de l'autre, ou ce sont deux programmes distinct, avec transmission par réseau, etc... ?)