Java Web3j ECKeyPair到KeyPair
我正在尝试使用web3j生成带有生成密钥的ECC。我有对象,但是Java Web3j ECKeyPair到KeyPair,java,android,encryption,elliptic-curve,web3-java,Java,Android,Encryption,Elliptic Curve,Web3 Java,我正在尝试使用web3j生成带有生成密钥的ECC。我有对象,但是cipher.init()要求第二个参数是Key对象。返回私钥和公钥的biginger,如何将它们转换为持有PrivateKey和PublicKey对象的KeyPair 我试过(参考:): 但这会返回一个错误: 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“org.bouncycastle.math.ec.ECCurve org.bouncycastle.jce.spec.ECP
cipher.init()
要求第二个参数是Key
对象。返回私钥和公钥的biginger
,如何将它们转换为持有PrivateKey
和PublicKey
对象的KeyPair
我试过(参考:):
但这会返回一个错误:
原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“org.bouncycastle.math.ec.ECCurve org.bouncycastle.jce.spec.ECParameterSpec.getCurve()”
有没有其他方法可以将Web3j转换为
密钥对?我在四处探索后终于找到了它。这里的主要内容是“如何使用公钥字符串生成ECPoint”
我是这样做的,不是转换整个EcKeyPair
对象,而是分别转换键
公钥字符串到ECPublicKey
:
private fun toEcPublicKey(publicKey: String): ECPublicKey {
val params = ECNamedCurveTable.getParameterSpec("secp256k1")
val curveSpec = ECNamedCurveSpec("secp256k1", params.curve, params.g, params.n)
//This is the part how to generate ECPoint manually from public key string.
val pubKeyX = publicKey.substring(0, publicKey.length / 2)
val pubKeyY = publicKey.substring(publicKey.length / 2)
val ecPoint = ECPoint(BigInteger(pubKeyX, 16), BigInteger(pubKeyY, 16))
val params2 = EC5Util.convertSpec(curveSpec.curve, params)
val keySpec = java.security.spec.ECPublicKeySpec(ecPoint, params2)
val factory = KeyFactory.getInstance("ECDSA")
return factory.generatePublic(keySpec) as ECPublicKey
}
private fun toEcPrivateKey(privateKey: String): ECPrivateKey {
val ecKeyPair = ECKeyPair.create(Numeric.hexStringToByteArray(privateKey))
val params = ECNamedCurveTable.getParameterSpec("secp256k1")
val curveSpec = ECNamedCurveSpec("secp256k1", params.curve, params.g, params.n)
val keySpec = java.security.spec.ECPrivateKeySpec(
ecKeyPair.privateKey,
curveSpec)
val factory = KeyFactory.getInstance("ECDSA")
return factory.generatePrivate(keySpec) as ECPrivateKey
}
私钥字符串到ECPrivateKey
:
private fun toEcPublicKey(publicKey: String): ECPublicKey {
val params = ECNamedCurveTable.getParameterSpec("secp256k1")
val curveSpec = ECNamedCurveSpec("secp256k1", params.curve, params.g, params.n)
//This is the part how to generate ECPoint manually from public key string.
val pubKeyX = publicKey.substring(0, publicKey.length / 2)
val pubKeyY = publicKey.substring(publicKey.length / 2)
val ecPoint = ECPoint(BigInteger(pubKeyX, 16), BigInteger(pubKeyY, 16))
val params2 = EC5Util.convertSpec(curveSpec.curve, params)
val keySpec = java.security.spec.ECPublicKeySpec(ecPoint, params2)
val factory = KeyFactory.getInstance("ECDSA")
return factory.generatePublic(keySpec) as ECPublicKey
}
private fun toEcPrivateKey(privateKey: String): ECPrivateKey {
val ecKeyPair = ECKeyPair.create(Numeric.hexStringToByteArray(privateKey))
val params = ECNamedCurveTable.getParameterSpec("secp256k1")
val curveSpec = ECNamedCurveSpec("secp256k1", params.curve, params.g, params.n)
val keySpec = java.security.spec.ECPrivateKeySpec(
ecKeyPair.privateKey,
curveSpec)
val factory = KeyFactory.getInstance("ECDSA")
return factory.generatePrivate(keySpec) as ECPrivateKey
}
字符串键输入是从库中生成的。我在四处探索后终于找到了它。这里的主要内容是“如何使用公钥字符串生成ECPoint”
我是这样做的,不是转换整个EcKeyPair
对象,而是分别转换键
公钥字符串到ECPublicKey
:
private fun toEcPublicKey(publicKey: String): ECPublicKey {
val params = ECNamedCurveTable.getParameterSpec("secp256k1")
val curveSpec = ECNamedCurveSpec("secp256k1", params.curve, params.g, params.n)
//This is the part how to generate ECPoint manually from public key string.
val pubKeyX = publicKey.substring(0, publicKey.length / 2)
val pubKeyY = publicKey.substring(publicKey.length / 2)
val ecPoint = ECPoint(BigInteger(pubKeyX, 16), BigInteger(pubKeyY, 16))
val params2 = EC5Util.convertSpec(curveSpec.curve, params)
val keySpec = java.security.spec.ECPublicKeySpec(ecPoint, params2)
val factory = KeyFactory.getInstance("ECDSA")
return factory.generatePublic(keySpec) as ECPublicKey
}
private fun toEcPrivateKey(privateKey: String): ECPrivateKey {
val ecKeyPair = ECKeyPair.create(Numeric.hexStringToByteArray(privateKey))
val params = ECNamedCurveTable.getParameterSpec("secp256k1")
val curveSpec = ECNamedCurveSpec("secp256k1", params.curve, params.g, params.n)
val keySpec = java.security.spec.ECPrivateKeySpec(
ecKeyPair.privateKey,
curveSpec)
val factory = KeyFactory.getInstance("ECDSA")
return factory.generatePrivate(keySpec) as ECPrivateKey
}
私钥字符串到ECPrivateKey
:
private fun toEcPublicKey(publicKey: String): ECPublicKey {
val params = ECNamedCurveTable.getParameterSpec("secp256k1")
val curveSpec = ECNamedCurveSpec("secp256k1", params.curve, params.g, params.n)
//This is the part how to generate ECPoint manually from public key string.
val pubKeyX = publicKey.substring(0, publicKey.length / 2)
val pubKeyY = publicKey.substring(publicKey.length / 2)
val ecPoint = ECPoint(BigInteger(pubKeyX, 16), BigInteger(pubKeyY, 16))
val params2 = EC5Util.convertSpec(curveSpec.curve, params)
val keySpec = java.security.spec.ECPublicKeySpec(ecPoint, params2)
val factory = KeyFactory.getInstance("ECDSA")
return factory.generatePublic(keySpec) as ECPublicKey
}
private fun toEcPrivateKey(privateKey: String): ECPrivateKey {
val ecKeyPair = ECKeyPair.create(Numeric.hexStringToByteArray(privateKey))
val params = ECNamedCurveTable.getParameterSpec("secp256k1")
val curveSpec = ECNamedCurveSpec("secp256k1", params.curve, params.g, params.n)
val keySpec = java.security.spec.ECPrivateKeySpec(
ecKeyPair.privateKey,
curveSpec)
val factory = KeyFactory.getInstance("ECDSA")
return factory.generatePrivate(keySpec) as ECPrivateKey
}
字符串键输入是从库中生成的。非常有用。谢谢,真的很有帮助。谢谢