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

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

私钥生产和根据私钥 找到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日