2016-11-22 5 views
0

Ich möchte meine Unterschrift verifizieren. Ich verwende diesen Codedigitale Signatur überprüfen

var encoder = new UTF8Encoding(); 
    byte[] bytesToVerify = encoder.GetBytes(LoginChallenge); 
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
RSAKeyInfo.Modulus = publickey1; 
rsa.ImportParameters(RSAKeyInfo); 
    bool suc = rsa.VerifyData(bytesToVerify, CryptoConfig.MapNameToOID("SHA1"), signedBytes); 

Ich habe öffentlichen Schlüssel im Byte-Array-Format. Es ist in meiner Datenbank. wie diese

enter image description here

immer suc = false. Ich bin sicher, bytetoverify hat den gleichen Wert mit dem Eingabewert im Methodenzeichen.

mein Zeichen Methode:

Signature signature=Signature.getInstance(Signature.ALG_RSA_SHA_PKCS1,false); 
     signature.init(thePrivateKey,Signature.MODE_SIGN); 
     signLength=signature.sign(buffer,(short)(ISO7816.OFFSET_CDATA & 0xFF), inputlength, buffer, (short)(0)); 

     apdu.setOutgoingAndSend((short)0,signLength); 

ich meinen öffentlichen Schlüssel erzeugen auf diese Weise nicht wissen, ist Problem oder Zeichen Problem hat. In der Zeichenmethode verwende ich sh1 und pkcs1, aber in Verify finde ich nur sh1.

kann mir jeder Körper helfen?

+0

** Any ** -Format ist ein Byte-Array-Format, wenn es auf Ihrem Computer ist. Sie müssen genauer sein und uns zeigen, was Sie versucht haben. Es wäre eine gute Idee, alle Bytes in Hexadezimalzahlen anzuzeigen; Es ist ein * öffentlicher * Schlüssel, richtig? –

+0

Vielen Dank für die Antwort. Ja, ich habe den öffentlichen Schlüssel in SQL Server als Bild gespeichert. Ich möchte es holen und es in RSA-Parameter konvertieren. Ich kann öffentlichen Schlüssel in DB nicht sehen, um Sie zu zeigen, weil es wie Bild ist. Und ja, es ist in Hex-Format – Fatemeh

Antwort

0

Was haben Sie in der Datenbank gespeichert? Nur der Moduluswert?

Ein öffentlicher RSA-Schlüssel hat zwei Felder, Modulus und Exponent. Sie müssen beide einen wichtigen Schlüsselimport und -betrieb durchführen.

In 99,999993% der jemals erstellten RSA-Schlüssel ist der Exponent-Wert new byte[] { 0x01, 0x00, 0x01 }; so können Sie fast immer weg mit der Speicherung nur der Modulus Wert und vorausgesetzt, was Exponent ist.

Für beste Ergebnisse nicht annehmen. Oder weisen Sie die Schlüssel bei der Registrierung zumindest dann zurück, wenn ihr Exponent-Wert nicht 0x010001 ist.

Also wirklich das kommt darauf an:

  • Sie müssen Exponenten einstellen (auf den richtigen Wert)
  • Sie benötigen eine Import-Logik entspricht Ihre Export-Logik, um sicherzustellen, Sie laden, um sicherzustellen,/dieselben Dinge an denselben Orten speichern.
+0

Vielen Dank für die Antwort. Ich habe nur Modulwert in db gespeichert – Fatemeh

Verwandte Themen