gpt4 book ai didi

c# - 验证 Java Card 签名

转载 作者:行者123 更新时间:2023-11-30 12:55:30 25 4
gpt4 key购买 nike

我正在 NXP J3D081 卡上编写 Java Card 3.0.2 应用程序。我使用 ALG_ECDSA_SHA_256 对签名进行签名和验证。我的测试应用程序已将 key 写入卡中。如果我签署 32 字节的数据并将签名传回卡,则验证码会成功验证签名。如果我使用私钥在 Bouncy CaSTLe 中签署 32 个字节并传递给卡上的验证,它会成功验证签名。充气城堡验证代码成功验证了从充气城堡签名例程创建的签名。

但是,如果我从 Java Card 获取返回的签名并将其传递给 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. 使用一些在线工具验证签名。不要忘记使用从 javacard 生成的相同曲线参数和公钥。
  2. 使用 bouncy caSTLe java 库进行验证。我在我的一个工具中执行了相同的步骤,并且匹配成功。

关于c# - 验证 Java Card 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48525430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com