小葡萄、 2023-10-09 11:54 采纳率: 16.7%
浏览 13
已结题

私钥公钥怎么生产获取得到

私钥生产和根据私钥 找到PrivateKey对象

    private static final BouncyCastleProvider PROVIDER = new BouncyCastleProvider();

try {
            ECGenParameterSpec sm2Spec = new ECGenParameterSpec("sm2p256v1");
            KeyPairGenerator kpg = KeyPairGenerator.getInstance("EC", PROVIDER);
            kpg.initialize(sm2Spec, new SecureRandom());
            // 获取密钥对
            KeyPair keyPair = kpg.generateKeyPair();
            return keyPair;
        } catch (Throwable e) {
            throw new RuntimeException(e);
        }


bytesToHex(keyPair.getPrivate().getEncoded()))) 方法内容是
Hex.encodeHexString(bs).toUpperCase() 返回了一个私钥字符串

我上面代码生成了一个私钥字符串 我现在想把这个私钥转换成PrivateKey 对象下面代码 但是报错了

KeyFactory keyFactory = KeyFactory.getInstance("EC",PROVIDER);
        PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(PRIVATE_KEY.getBytes());
        PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
        System.out.printf(privateKey.getEncoded()+"");
        return privateKey;

encoded key spec not recognized: failed to construct sequence from byte[]: unknown tag 19 encountered

  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-09 11:58
    关注

    引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。


    要将字符串转换成PrivateKey类型,可以使用KeyFactory和PKCS8EncodedKeySpec来实现。首先,你需要将私钥字符串转换成byte数组,然后使用PKCS8EncodedKeySpec将其转换成KeySpec对象,最后使用KeyFactory生成PrivateKey对象。

    这是一个示例代码:

    String privateKeyString = "308193020100301306072A8648CE3D020106082A811CCF5501822D0479307702010104...";
    byte[] privateKeyBytes = Hex.decodeHex(privateKeyString.toCharArray());
    
    KeyFactory keyFactory = KeyFactory.getInstance("EC", PROVIDER);
    PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
    PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
    
    return privateKey;
    

    此示例假设你使用的是BouncyCastle库提供的Hex工具类,用于将十六进制字符串转换成byte数组。请确保正确引入了相应的BouncyCastle库。

    在这个示例中,首先将私钥字符串转换成byte数组,然后根据EC密钥类型创建KeyFactory对象。接下来,使用PKCS8EncodedKeySpec将私钥byte数组转换成KeySpec对象,最后使用KeyFactory的generatePrivate方法生成PrivateKey对象。

    通过上述代码,你可以将私钥字符串成功转换成PrivateKey对象。希望能对你有所帮助!如果你还有其他问题,请随时提问。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 已采纳回答 10月9日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?