2017-04-06 3 views
0

Ich habe einen 256 Byte Modul ('n'), einen 256 Byte privaten Exponenten ('d') und einen 3 Byte {1,0,1} öffentlichen Exponenten ('e '). Ich versuche 32 Byte Daten zu signieren.RSA Kryptographie mit rohen Schlüsseln, C#

Ich habe versucht, einen neuen RSAParameters zu erstellen.

byte[] n = new byte[256]; //populated in my code 
byte[] d = new byte[256]; //populated in my code 
byte[] e = new byte[]{1,0,1}; 
byte[] junkData = new byte[32]; //populated in my code 

RSAParameters rsaParam = new RSAParameters(); 
rsaParam.Modulus = n; 
rsaParam.Exponent = e; 
rsaParam.D = d; 

Ich erstelle dann einen RSACrytoServiceProvider, die Parameter in sie importieren und versuchen, Daten zu unterzeichnen.

var csp = new RSACryptoServiceProvider(2048); 
csp.ImportParameters(rsaParam); 
csp.SignData(junkData, new SHA1CryptoServiceProvider()); 

Das Problem ist, dass die RSACryptoServiceProvider nur öffentlich zu sein scheint, und wenn ich versuche, erhalte ich zu unterzeichnen eine Exception Cryptography ‚Keyset nicht existiert‘.

Brauche ich auch die P- und Q-Elemente, um die Daten richtig zu signieren, oder mache ich etwas, das offensichtlich falsch ist? Danke für die Hilfe!

+0

ich vermute, dass die csp will, dass P & Q und np und nq simplyfy sign und entschlüsseln operationen mit dem chinesischen rest satz ... spart ein paar zyklen, aber erfordert mehr als N, d und e – DarkSquirrel42

+0

... aaand von natürlich habe ich vergessen zu erwähnen q_inv ... – DarkSquirrel42

+1

Mögliche duplikate von [Entschlüsseln mit RSA-Verschlüsselung in VB.NET] (http://stackoverflow.com/questions/42098493/decrypting-with-rsa-encryption-in-vb-net) –

Antwort

0

Ich bin überrascht, dass die ImportParameters nicht werfen (verwenden Sie Mono?).

RSACryptoServiceProvider (und alle RSA-Implementierungen in .NET Framework und .NET Core) erfordern eine vollständig belegte RSAParameters-Struktur für private Schlüssel.

https://stackoverflow.com/a/42117655/6535399 gibt die Antwort in ein bisschen mehr Details.

+0

Das sieht für mich wie ein Duplikat aus. Liege ich falsch? Warum haben Sie wieder eine sehr ähnliche Antwort gegeben? –

+0

Ich stimme zu, es hat eine doppelte Antwort, aber dass die beiden Fragen die Probleme auf unterschiedliche Weise entdeckt. Obwohl ich denke, als Dupe markiert zu sein, verlässt die Weiterleitung den Link ... – bartonjs

+0

Wenn Sie zu der Frage gehen, wo Sie die ursprüngliche Antwort hinterlassen haben, sehen Sie, dass sie diese Frage im rechten Feld direkt unter den Meta und globalen Fragen verknüpft. –