簡體   English   中英

驗證數字簽名

[英]verify digital signature

我想驗證我的簽名。 我用這個代碼

 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);

我有字節數組格式的公鑰。 它在我的數據庫中。 像這樣

在此處輸入圖片說明

總是suc = false。 我確定bytetoverify與方法符號中的輸入值具有相同的值。

我的簽名方法:

 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);

我不知道我以這種方式生成公鑰是有問題的,還是標志有問題。 在簽名方法中,我使用sh1和pkcs1,但在驗證中我僅找到sh1。

每個人都可以幫助我嗎?

您保存了什么到數據庫? 只是模量值?

RSA公鑰具有兩個字段,“模量”和“指數”。 它們都需要成功進行密鑰導入和操作。

在曾經創建的99.999993%的RSA密鑰中,指數值是new byte[] { 0x01, 0x00, 0x01 } ; 因此,您幾乎總是可以只存儲模量值,並假設是Exponent

為了獲得最佳結果,請不要假設。 或者,至少如果它們的指數值不是0x010001 ,則拒絕注冊鍵。

所以實際上這歸結為:

  • 您需要將指數設置為正確的值
  • 您需要確保導入邏輯與導出邏輯匹配,以確保將相同的內容加載/保存到相同的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM