【问题标题】:How can I get java.security.PrivateKey from 32 byte raw private key ? (Secp256k1 Algorithm)如何从 32 字节原始私钥中获取 java.security.PrivateKey ? (Secp256k1 算法)
【发布时间】:2019-11-27 01:18:21
【问题描述】:

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

【问题讨论】:

    标签: java bouncycastle private-key ecdsa


    【解决方案1】:

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

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

    【讨论】:

    • 更好的答案是包含进行实际编码的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多