2017-08-01 5 views
0

Je veux poser une question à propos de RSA signer sur C#.Signer le document avec ses propres paramètres RSA qui sont codés en hexadécimal

J'ai un document pour le signe. J'ai des valeurs hexadécimales simples de module, d'exposant privé et d'exposant public. Je ne veux pas signer avec des clés générées aléatoirement. Quand j'essaye avec signe avec l'outil de signe, j'ai le résultat parfaitement. Mais je ne peux pas le faire avec C#. Je suis nouveau pour ce genre de problème. Donc je suis vraiment coincé. J'ai regardé beaucoup de sites et d'arcticles mais je n'ai pas trouvé de solution. Peut-être qu'il y en a mais je ne comprends pas, je ne sais pas.

Si vous pouviez m'expliquer avec des détails (étape-étape), je serai vraiment reconnaissant.

Répondre

0

Dans .NET, vous avez besoin de l'ensemble des paramètres CRT pour la clé privée, donc si vous avez D, vous aurez également besoin de P, Q, DP, DQ et InverseQ.

RSAParameters rsaParams = new RSAParameters(); 
rsaParams.Modulus = ParseHex(modulus); 
rsaParams.Exponent = ParseHex(exponent); 
rsaParams.D = ParseHex(d, rsaParams.Modulus.Length); 
rsaParams.P = ParseHex(p, (rsaParams.Modulus.Length + 1)/2); 
rsaParams.Q = ParseHex(q, rsaParams.P.Length); 
rsaParams.DP = ParseHex(dp, rsaParams.P.Length); 
rsaParams.DQ = ParseHex(dq, rsaParams.P.Length); 
rsaParams.InverseQ = ParseHex(inverseQ, rsaParams.P.Length); 

RSA rsa = RSA.Create(); 
rsa.ImportParameters(rsaParams); 

ParseHex(string str, int len=-1) est une routine qui parse vos chaînes hexagonales à un tableau de longueur fixe (si la chaîne hexagonale est courte, le tableau doit être laissé rembourré avec des valeurs de 0 octet).