首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证Java Card签名

验证Java Card签名
EN

Stack Overflow用户
提问于 2018-01-30 23:49:42
回答 1查看 278关注 0票数 5

我正在恩智浦J3D081卡上编写Java card 3.0.2应用程序。我有它的签名和验证签名使用ALG_ECDSA_SHA_256。我的测试应用程序已经将密钥写入到卡中。如果我对32个字节的数据进行签名,并将签名传回卡,那么验证码就会成功地验证签名。如果我用私钥在Bouncy Castle中签名32个字节,并将其传递给卡上的Verify,它将成功验证签名。弹跳城堡验证代码成功地验证了从弹跳城堡签名例程创建的签名。

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

代码语言:javascript
复制
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曲线,并在与卡的加密通信中成功使用。公钥创建成功。

我现在的头发似乎比两天前少了。欢迎任何指点。

EN

回答 1

Stack Overflow用户

发布于 2018-01-31 16:55:58

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

  1. 使用一些在线可用的工具验证签名。不要忘记使用相同的曲线参数和由javacard.
  2. Verify生成的公钥,同样使用bouncy castle java库。我在我的一个工具中执行了相同的步骤,并成功匹配。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48525430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档