Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Web3j ECKeyPair到KeyPair_Java_Android_Encryption_Elliptic Curve_Web3 Java - Fatal编程技术网

Java Web3j ECKeyPair到KeyPair

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

我正在尝试使用web3j生成带有生成密钥的ECC。我有对象,但是
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
}

字符串键输入是从库中生成的。

非常有用。谢谢,真的很有帮助。谢谢