如何从 32 字节原始私钥中获取 java.security.PrivateKey ? (Secp256k1 算法)
Posted
技术标签:
【中文标题】如何从 32 字节原始私钥中获取 java.security.PrivateKey ? (Secp256k1 算法)【英文标题】:How can I get java.security.PrivateKey from 32 byte raw private key ? (Secp256k1 Algorithm) 【发布时间】: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;
【问题讨论】:
【参考方案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));
【讨论】:
更好的答案是包含进行实际编码的代码。以上是关于如何从 32 字节原始私钥中获取 java.security.PrivateKey ? (Secp256k1 算法)的主要内容,如果未能解决你的问题,请参考以下文章
如何获取 PCCERT_CONTEXT 的私钥的 NCRYPT_KEY_HANDLE?
如何通过 PKCS#11 API 从 eToken 获取私钥?
在 java/scala 中生成 ecdsa 32 字节私钥