gpt4 book ai didi

java - 将 ECPublicKey 从 JavaCard 恢复到 Java

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:20 24 4
gpt4 key购买 nike

我正在尝试在终端(由我的计算机模拟)和智能卡(Java 卡)之间实现 ECDH。

我修复了我想使用的椭圆曲线,在卡端我有以下代码来运行协议(protocol)的第一部分:

        ECPublicKey pubKey = (ECPublicKey) KeyBuilder.buildKey(
KeyBuilder.TYPE_EC_FP_PUBLIC, (short) 0x0100, false);
pubKey.setFieldFP(p, (short) 0x0001, (short) 0x0020);
pubKey.setA(a, (short) 0x0001, (short) 0x0020);
pubKey.setB(b, (short) 0x0000, (short) 0x0020);
pubKey.setR(r, (short) 0x0001, (short) 0x0020);
pubKey.setG(g, (short) 0x0000, (short) g.length);

ECPrivateKey privKey = (ECPrivateKey) KeyBuilder.buildKey(
KeyBuilder.TYPE_EC_FP_PRIVATE, (short) 0x0100, false);

KeyPair keypair = new KeyPair(pubKey, privKey);
keypair.genKeyPair();

pubKey.getW(apduBuffer, (short) 0x0000);
setOutgoingAndSend((short) 0x0000, (short) 0x0041);

所以我为 ECDH 创建了一个 key 对,并将公共(public) key 对发送到我的终端。

我的问题如下:鉴于我收到的响应 APDU,我无法重建 ECPublicKey...

我没有找到在 Java 中执行此操作的任何方法(即使使用外部库作为 Bouncy CaSTLe)。

有人可以帮助我吗?提前谢谢你。

最佳答案

JavaCard 中返回的公钥格式如下:04 x y。在终端端,首先必须提取 x 和 y 坐标。然后,

KeyFactory kf = KeyFactory.getInstance("ECDSA", "BC");

ECPoint point = new ECPoint(x, y);

ECParameterSpec domainparameters = new ECParameterSpec(...); // initialize your domain parameters

ECPublicKeySpec spec = new ECPublicKeySpec(point, domainparameters);

ECPublicKey publickey = (ECPublicKey)kf.generatePublic(spec);

关于java - 将 ECPublicKey 从 JavaCard 恢复到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30733932/

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