Unterschrift mit SHA256

Ich habe eine smartcard und ich muss signieren eine Datei mit diesem.
Das ist ein großes problem, da sehe ich in stackover.

Konnte ich nicht verwenden RSACryptoServiceProvider, bkz es keine Unterstützung für RSA-SHA256 alogrithm.

Zuerst habe ich verwendet CAPICOM.dll wie code ist unten,

SignedData sed = new SignedData();
sed.Content = "a"; //data to sign
Signer ser = new Signer();
ser.Certificate = cc;
string singnn = sed.Sign(ser, false, CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);

Aber es gibt nicht einen öffentlichen Schlüssel zu validieren meiner Signatur Wert, ich couldnt get eine Validierung der wichtigsten aus capicom.dll.

Und nach ,

Ich verwendet, X509Certificate2-und RSACryptoServiceProvider wie code unten

        X509Certificate2 certificate = new X509Certificate2();
        //Access Personal (MY) certificate store of current user
        X509Store my = new X509Store(StoreName.My, StoreLocation.CurrentUser);
        my.Open(OpenFlags.ReadOnly);

        //Find the certificate we'll use to sign            
        RSACryptoServiceProvider csp = null;
        foreach (X509Certificate2 cert in my.Certificates)
        {
            if (cert.Subject.Contains(certSubject))
            {
                //We found it. 
                //Get its associated CSP and private key
                certificate = cert;
                csp = (RSACryptoServiceProvider)cert.PrivateKey;
            }
        }
        if (csp == null)
        {
            throw new Exception("No valid cert was found");
        }

        //Hash the data
        SHA1Managed sha1 = new SHA1Managed();
        UnicodeEncoding encoding = new UnicodeEncoding();
        byte[] data = encoding.GetBytes(text);
        byte[] hash = sha1.ComputeHash(data);

        //byte[] data = Encoding.UTF8.GetBytes(text);
        //HashAlgorithm sha = new SHA256Managed();
        //byte[] hash = sha.TransformFinalBlock(data, 0, data.Length);

        string key = csp.ToXmlString(false);
        //Sign the hash
        csp.PersistKeyInCsp = true;
        byte[] response = csp.SignData(data, CryptoConfig.MapNameToOID("SHA1"));
        string signbase64 = Convert.ToBase64String(response);

Funktioniert es , aber ich muss signieren mit RSA-SHA256-Algorithmus.
Wenn ich changw hash-Algorithmus wie diese

byte[] response = csp.SignData(data, CryptoConfig.MapNameToOID("SHA256"));

Ich bin immer ein

Fehler : "unbekannter Fehler".

Das ist mein problem,
Was ist die Lösung eignet sich auch , oder welche Bibliothek soll ich benutzen ??

Vielen Dank für jeden Rat..

InformationsquelleAutor Turgay Gençer | 2012-05-20

Schreibe einen Kommentar