首页 > 解决方案 > 如何从 32 字节原始私钥中获取 java.security.PrivateKey ?(Secp256k1 算法)

问题描述

我正在尝试从使用 getS() 方法获得的 32 字节原始私钥中获取 PrivateKey 对象。我在充气城堡库中使用了 ECDSA secp256k1 算法来生成密钥对。

下面是我在字节数组中获取 32 字节私钥的方式,我想反转这个过程以从 32 字节私钥中获取 PrivateKey 对象。

谁能帮我解决这个问题?我真的很感激。

PrivateKey prvKey;

public byte[] getPrivateKey() {
        ECPrivateKey ecPrv = (ECPrivateKey) this.prvKey;
        byte[] prv = ecPrv.getS().toByteArray();
        if (prv[0] == 0) {
            byte[] rslt = new byte[prv.length - 1];
            System.arraycopy(prv, 1, rslt, 0, prv.length - 1);
            return rslt;
        } else {
            return prv;
        }
    }

标签: javabouncycastleprivate-keyecdsa

解决方案


我找到了我的问题的答案。我使用编码的私钥作为以下方法的参数。以防万一有人还在寻找答案...

private PrivateKey generatePrivateKey(byte[] encodedPrivateKey)
            throws NoSuchAlgorithmException, InvalidKeySpecException {
        Security.addProvider(new BouncyCastleProvider());
        KeyFactory keyFactory = KeyFactory.getInstance(KEY_FACTORY_ALGORITHM);
        return keyFactory.generatePrivate(new PKCS8EncodedKeySpec(encodedPrivateKey));
    }

推荐阅读