繁体   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