Comment puis-je remplir RSAParameters valeur en c#
J'ai été en utilisant le code ci-dessous pour le chiffrement dans mon projet et tout fonctionnait bien.
RSACryptoServiceProvider x_alg = new RSACryptoServiceProvider( );
//export only the public key
RSAParameters x_public_params = x_alg.ExportParameters(false);
//export the private key
RSAParameters x_private_params = x_alg.ExportParameters(true);
Maintenant client changé l'exigence et qu'il veut stocker toutes les RSAParameters valeur dans le fichier de configuration et fournis ci-dessous les détails pour la démo
<project name="netCard Server1">
<key length="256"></key>
<D length="64">00000000000000000000000000000000000000000000000000000000000019C5</D>
<DP length="32">00000000000000000000000000000061</DP>
<DQ length="32">00000000000000000000000000000065</DQ>
<Exponent length="6">000DCD</Exponent>
<InverseQ length="32">0000000000000000000000000000003B</InverseQ>
<Modulus length="64">0000000000000000000000000000000000000000000000000000000000002C95</Modulus>
<P length="32">00000000000000000000000000000065</P>
<Q length="32">00000000000000000000000000000071</Q>
<text length ="64">0123456789ABCDEF111111111111111125FE2222222222222233333333334444</text>
<cipher length ="64">0000000000000000000000000000000000000000000000000000000000000000</cipher>
</project>
Maintenant,le problème est que lorsque je suis de l'importation de la RSAParameters valeur,je reçois de Mauvaises Données d'Exception
Il suffit de créer votre propre paire de clés RSA directement avec le RSACryptoServiceProvider puis exporter les paramètres avec et sans la clé privée. Maintenant comparer ce résultat avec celui ci-dessus pour voir les différences.
OriginalL'auteur santosh singh | 2012-11-26
Vous devez vous connecter pour publier un commentaire.
Le problème que vous avez est que le XML que votre client vous a donné n'est pas dans le format requis pour désérialiser un objet de type
RSAParameters
J'ai fait ce code pour montrer ce qu'est le XML généré par le sérialiseur XML ressemble à
La sortie qu'il génère est quelque chose comme:
où ... est sortie tronquée. Ce que votre client a fourni ressemble à un sur-ensemble de celui-clé, le texte et de chiffrement ne sont pas dans la liste des paramètres), mais le format est un peu différent.
Vous pouvez leur demander de fournir les données exactement dans le format requis, puis sérialiser à partir de ce; ou vous pouvez accepter leur format, le désérialiser de XML et de construire la
RSAParameters
objet manuellement par la cartographie du contenu XML dans les champs appropriés sur leRSAParameters
objet. Vous avez également besoin de décider de ce qu'ils veulent faire avec la clé, le texte et le chiffrement des données, car elles seront perdues dans ce processus.De ce que je peux voir votre client a fourni les valeurs de P,Q,DP,DQ,InverseA et D dans leur XML au format hexadécimal, de sorte que vous n'avez pas besoin de générer quoi que ce soit, tout ce que vous devez faire est d'analyser ce fichier et affecter ces valeurs pour les paramètres appropriés sur une nouvelle
RSAParameters
objet.OriginalL'auteur briantyler
À partir de l'exemple de la structure que vous avez fournis, il semble qu'il y est des données supplémentaires, ce qui vous peut (ou ne peut pas) être en mesure de fournir.
De chiffre et le Texte ne sont pas en RSAProperties, si bien que le client devra spec pour vous
[XmlRoot("Projet")]
public class RSAWrapper{
[XmlIgnore]
public RSAParameters RsaWrap{get;set;}
}
//puis utiliser la classe ci-dessus en tant que tel:
....
RSACryptoServiceProvider x_alg = new RSACryptoServiceProvider();
OriginalL'auteur Sten Petrov