我正在尝试使用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;
        }
    }

最佳答案

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

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));
    }

关于java - 如何从32字节原始私钥中获取java.security.PrivateKey? (Secp256k1算法),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59061692/

10-10 23:16