2017-09-04 4 views
0

Ich signiere eine Zeichenfolge über RSACryptoServiceProvider unter Verwendung eines digitalen Zertifikats als Schlüssel.Legen Sie das Handle des Authentifizierungsfensters von RSACryptoServiceProvider fest

Dieser Vorgang wird in einer COM-DLL ausgeführt, die aus einer Delphi-Anwendung aufgerufen wird.

bei der Wahl des Zertifikats ist es möglich, den Griff durch die Methode zu übergeben:

scollection = X509Certificate2UI.SelectFromCollection (fcollection, "Available digital certificate (s)", "Select digital certificate", X509SelectionFlag.SingleSelection, ptr); 

aber in dem Authentifizierungs-Bildschirm nicht etwas ähnliches tun, ich könnte, kann dies mir jemand helfen?

Antwort

1

Angenommen, Sie meinen Sie eine PIN oder ein Zustimmungsaufforderung zu einem gewissen HWND parented wollen, wollen Sie so etwas wie

private static RSACryptoServiceProvider AssociateHwnd(
    RSACryptoServiceProvider rsaCsp, 
    IntPtr hwnd) 
{ 
    CspKeyContainerInfo containerInfo = rsaCsp.CspKeyContainerInfo; 

    CspParameters newParameters = new CspParameters(
     containerInfo.ProviderType, 
     containerInfo.ProviderName, 
     containerInfo.KeyContainerName) 
    { 
     KeyNumber = (int)containerInfo.KeyNumber, 
     Flags = CspProviderFlags.UseExistingKey, 
     ParentWindowHandle = hwnd, 
    }; 

    if (containerInfo.MachineKeyStore) 
    { 
     newParameters.Flags |= CspProviderFlags.UseMachineKeyStore; 
    } 

    return new RSACryptoServiceProvider(newParameters); 
} 

Beachten Sie, dass dieser Code Sie .NET 4.7 als Laufzeit haben annimmt, beschrieben den einfachen Weg mit in https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/mitigation-cspparameters-parentwindowhandle-expects-an-hwnd.

Verwandte Themen