gounie 2023-08-10 18:13 采纳率: 0%
浏览 13
已结题

secp256r1椭圆曲线加密问题

有佬搞过secp256r1椭圆曲线加密么?

public static KeyPair gettempKey(){
        Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
        // 获取secp256k1曲线参数规格
        ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("secp256r1");
        // 创建密钥对生成器
        KeyPairGenerator generator = KeyPairGenerator.getInstance("EC", "BC");
        generator.initialize(spec);
        // 生成密钥对
        KeyPair keyPair = generator.generateKeyPair();
        return keyPair;
    }

我先用这个生成个密钥对来做接收端的公私钥,然后发送端每次都是生成新的临时密钥对 把公钥以0x04+x+y发过去按坐标解析出公钥再用我接收端的私钥进行ECDH协商计算 如下

PrivateKey myPrivateKey = getPrivateKeyFromS(myPriHex);
        PublicKey othPublicKey = getPublicKeyFromXY(myPubHex);
        KeyAgreement ecdhA = KeyAgreement.getInstance("ECDH");
        ecdhA.init(myPrivateKey);
        ecdhA.doPhase(othPublicKey, true);
        String commonSecret = HexUtil.encodeHexStr(ecdhA.generateSecret());

这里最后一行有的时候报坐标无效 有的时候可以计算成功
有劳指点一下

  • 写回答

1条回答 默认 最新

  • QvQ碎片 2023-08-10 19:21
    关注

    我注意到你在发送端使用了坐标形式的公钥,并将其转换为十六进制字符串。然后,在接收端使用相应方法进行解析。

    1. 公钥坐标问题:确保发送端在生成临时密钥对后,正确地将公钥的坐标x和y传输给接收端。在接收端使用这两个坐标进行公钥重建时,需要确保坐标的正确性。
      解决方法。确保坐标正确性:在发送端生成临时密钥对后,将公钥的坐标x和y正确传输给接收端。确保没有任何数据损坏或意外修改。

    2. 坐标编码格式问题:对于secp256r1曲线(也称为P-256曲线),公钥的坐标一般是以压缩或非压缩的格式表示的。压缩格式以0x02或0x03开头,而非压缩格式以0x04开头。请确保在发送端将坐标编码为正确的格式,并在接收端进行相应的解码操作。
      解决方法。检查坐标编码格式:对于secp256r1曲线,公钥的坐标通常以压缩或非压缩格式表示。请确保在发送端将坐标正确地编码为所需的格式,并在接收端进行相应的解码操作。

    3. 坐标解析问题:在接收端,确保正确地将十六进制字符串解析为坐标形式的公钥。可以使用相关的工具或库来实现这个解析过程。
      解决方法。使用正确的坐标解析方法:在接收端,使用正确的方法将十六进制字符串解析为坐标形式的公钥。使用Bouncy Castle库提供的方法ECPoint ecPoint = curve.decodePoint(publicKeyBytes);来解析公钥。

    4. 密钥协商算法问题:确保发送端和接收端使用相同的密钥协商算法。在你的代码中,使用的是ECDH算法,这是一种基于椭圆曲线Diffie-Hellman(ECDH)的密钥协商协议。确认发送端和接收端都初始化并使用相同的ECDH算法进行密钥协商。
      解决方法。检查密钥协商算法一致性:确保发送端和接收端都初始化并使用相同的密钥协商算法(如ECDH)进行密钥协商。验证发送端和接收端是否使用了相同的算法和参数。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月17日
  • 创建了问题 8月10日

悬赏问题

  • ¥120 计算机网络的新校区组网设计
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?