Laden...

CryptographicException bei Aufruf von RSA.ToXmlString(...)

Erstellt von DFDotNet vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.785 Views
D
DFDotNet Themenstarter:in
201 Beiträge seit 2007
vor 13 Jahren
CryptographicException bei Aufruf von RSA.ToXmlString(...)

Hallo,

Ich wollte heute mal schauen, ob ich es hinbekomme eine Lizenz-Prüfung mit RSA zu implementieren,, bin aber schon gleich zu Beginn gescheitert.
Der folgende simple Aufruf führt bei mir zu einer CryptographicException mit dem Text "Das System kann die angegebene Datei nicht finden.":


    private void button1_Click(object sender, EventArgs e)
    {
      RSA rsa = RSA.Create();
      rsa.KeySize = 512;
      string s = rsa.ToXmlString(false);
      MessageBox.Show(s);
    }

Der StackTrace ist der folgende:

"   bei System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)\r\n 
  bei System.Security.Cryptography.Utils._CreateCSP(CspParameters param, Boolean randomKeyContainer, SafeProvHandle& hProv)\r\n 
  bei System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)\r\n
   bei System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)\r\n
   bei System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()\r\n   bei System.Security.Cryptography.RSACryptoServiceProvider.ExportParameters(Boolean includePrivateParameters)\r\n
   bei System.Security.Cryptography.RSA.ToXmlString(Boolean includePrivateParameters)\r\n 
  bei WindowsFormsApplication1.Form1.button1_Click(Object sender, EventArgs e) in C:\\Dokumente und Einstellungen\\follmand\\Desktop\\WindowsFormsApplication1\\WindowsFormsApplication1\\Form1.cs:Zeile 26.\r\n
   bei System.Windows.Forms.Control.OnClick(EventArgs e)\r\n
   bei System.Windows.Forms.Button.OnClick(EventArgs e)\r\n
   bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)\r\n
   bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)\r\n   bei System.Windows.Forms.Control.WndProc(Message& m)\r\n
   bei System.Windows.Forms.ButtonBase.WndProc(Message& m)\r\n
   bei System.Windows.Forms.Button.WndProc(Message& m)\r\n
   bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)\r\n   bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)\r\n   bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)\r\n
   bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)\r\n
   bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)\r\n
   bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)\r\n
   bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)\r\n
   bei System.Windows.Forms.Application.Run(Form mainForm)\r\n
   bei WindowsFormsApplication1.Program.Main() in C:\\Dokumente und Einstellungen\\follmand\\Desktop\\WindowsFormsApplication1\\WindowsFormsApplication1\\Program.cs:Zeile 18.\r\n
   bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)\r\n   bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)\r\n
   bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()\r\n
   bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)\r\n
   bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)\r\n
   bei System.Threading.ThreadHelper.ThreadStart()"

Bei einem Kollegen auf dem Rechner läuft der Code einwandfrei und zeigt den XML-String mit dem public-key an, wie erwartet.

Ich weiß mir keinen Rat mehr, außer, dass ich mir irgendwie das .NET-Framework zerschossen habe. Reparatur über Systemsteuerung->Software brachte allerdings auch nichts...

Hat jemand eine Idee?

S
8.746 Beiträge seit 2005
vor 13 Jahren

Ist vermutlich ein Problem fehlender Rechte für den Keystore. Tritt typischerweise bei nicht-interaktiven Accounts auf.

Probier mal vor der XML-Konvertierung:

rsa.PersistKeyInCsp = false;

Geht das nicht, baue dir ein RSA-Objekte über den RSACryptoServiceProvider-Konstruktor. Da dann LocalMachineStore angeben.

Ggf. muss man das auch über die CAS machen. Kann sein, dass die Rechte für den Key-Zugriff restriktiv sind.

D
DFDotNet Themenstarter:in
201 Beiträge seit 2007
vor 13 Jahren

Hallo,

das hilft leider beides auch nicht weiter.

Mir ist gerade noch aufgefallen, dass das RSA-object (egal ob über

 RSA.Create();

oder

 RSACryptoServiceProvider.Create();

erzeugt) bei einigen Properties schon sofort nach der Erzeugung Exceptions beim Zugriff wirft (siehe Bild).
Das mit den Rechten würde mich auch sehr wundern, da mein Kollege und ich das selbe Image von der EDV-Abteilung auf den Rechner bekommen haben und es bei ihm ja funktioniert 😉

S
8.746 Beiträge seit 2005
vor 13 Jahren

Mal probiert die Anwendung unter verschiedenen Accounts laufen zu lassen, ggf. als Admin? Gehe mal davon aus, dass die Ursache nicht in deinem Code, sondern auf der speziellen Maschine zu finden ist. Ist auf beiden Maschinen VS installiert?

D
DFDotNet Themenstarter:in
201 Beiträge seit 2007
vor 13 Jahren

Mal probiert die Anwendung unter verschiedenen Accounts laufen zu lassen, ggf. als Admin?

Ich habe nur ein Benutzerkonto auf dem Rechner und das hat Admin-Rechte.

Gehe mal davon aus, dass die Ursache nicht in deinem Code, sondern auf der speziellen Maschine zu finden ist. Ist auf beiden Maschinen VS installiert?

Nein, VS ist nur bei mir installiert, aber das kann doch nicht die Ursache sein, oder? Macht ja keinen Sinn, dass man bestimmten Code auf Systemen mit VS nicht ausführen und somit nicht debuggen kann 😉