当前位置: 首页 > 知识库问答 >
问题:

验证Java卡签名

余善
2023-03-14

我正在恩智浦J3D081卡上编写Java卡3.0.2应用程序。我让它使用ALG_ECDSA_SHA_256对签名进行签名和验证。我的测试应用程序已经把钥匙写到卡上了。如果我对32字节的数据进行签名并将签名传回卡,验证码将成功地验证签名。如果我用私钥在Bouncy Castle中签名32个字节,并传递到卡上的验证,它就成功地验证了签名。bouncy castle验证代码成功验证从bouncy castle签名例程创建的签名。

但是,如果我从Java卡中获取返回的签名并将其传递给C#bouncy castle代码,它将无法验证签名。我已经检查了所有的输入值,它们是正确的。这里是我的代码(注意,我以64字节的形式传递公钥,并在它们前面加上0x04)

public bool HashAndVerifyDSA(byte[] pb, byte[] inData, byte[] sig)
{
    byte[] pub = new byte[65];
    pub[0] = 0x4;
    Array.Copy(pb, 0, pub, 1, 64);
    ECCurve curve = parameters.Curve;
    ECPoint q = curve.DecodePoint(pub);
    ICipherParameters Public = new ECPublicKeyParameters(algorithm, q, parameters);
    ISigner bSigner = SignerUtilities.GetSigner("SHA-256withECDSA");

    bSigner.Init(false, Public);
    bSigner.BlockUpdate(inData, 0, inData.Length);
    return (bSigner.VerifySignature(sig));
}

我应该注意的是,这些参数指定了P-256曲线,并且在与卡的加密通信中成功地使用了这些参数。公钥已成功创建。

我现在的头发好像比两天前少了。欢迎提供任何指示。

共有1个答案

薄龙光
2023-03-14

除了已经执行的调试步骤之外,您还可以检查以下内容:-

  1. 使用某些联机可用工具验证签名。不要忘记使用从JavaCard生成的相同曲线参数和公钥。
  2. 使用bouncy castle Java库验证相同。我在我的一个工具中执行了相同的步骤,并且匹配成功。
 类似资料:
  • 我正在编写一些代码,试图对一些数据进行签名。在将openssl生成的私钥转换为Java密钥库之后,我将Java签名类与SHA256withRSA一起使用。我试图确认openssl中Java类返回的签名,但由于某些原因,我无法让openssl进行验证。我最终需要在iOS Swift 3中实现这个签名验证,但在找到库之前,我想尝试根据openssl标准检查Java签名。 例如,我从我们的登录服务器得到

  • 问题内容: 我正在尝试以编程方式验证jar文件是否未被明显篡改。我有2个要防止的用例。1)修改现有类2)在罐子中添加新类 我使用jarsigner签名了罐子。当我用jarsigner验证以上两种情况之一时,它的工作方式就与我期望的一样。 当我尝试使用如何以编程方式验证用jarsigner签名的jar 或如何通过自签名的jar验证签名中的示例以编程方式进行操作时 ?但是,我没有任何SecurityE

  • 我写一个oauth与twitter的代码,我有401错误代码和"失败验证oauth签名和令牌"响应从twitter当我获取后请求到https://api.twitter.com/oauth/request_token.这是我的数据,我有: 我的步骤: 1.为签名准备的字符串 2.通过代码创建签名qQwIvFao9yeIQpi9ouz0oFi7/v8=: 3.最终授权标头(带转义引号): 问那些可能

  • 情况是我必须检查一个数字签名: 字符串1“A1005056807CE11EE2B4CE0025305725CFRCN=KED,OU=I0020266601,OU=SAPWebAS,O=SAPTrustCommunity,C=DE20130611102236”通过PKCS#7签名并通过HTTP-URL发送给我。 我在BASE64中获得签名的内容(在代码字符串sc中查找)。 现在我必须检查,如果Str

  • 说明 此协议用于用微信卡代替实体卡刷卡时,验证发送给客户微信的验证码,需要先调用协议5.4发送验证码。 请求地址 http://api.dc78.cn/Api/mb_checkvcode 请求方式 GET 请求参数 参数 参数名称 必填 描述 范例 id 微信卡id 是 code 验证码 是 amt 交易金额 否 传入金额可以验证与发送验证码时的金额是否匹配 pwd 通卡密码 是 当会员卡为通卡时

  • 此协议用于用微信卡代替实体卡刷卡时,验证发送给客户微信的验证码,需要先调用协议5.4发送验证码。 请求参数说明 参数 描述 必填 示例值 类型 最大长度 action 接口参数组 是 object └action 需要调用的接口名称 是 mb_checkvcode string get GET参数组,本组参数需要参与签名 是 object └mbno 会员卡号 否 15696132602 numb