Предполагается, что открытый ключ, закодированный в 33 байта, может быть создан следующим образом:
Security.addProvider(provider)
val generator = KeyPairGenerator.getInstance("ECDSA")
val ecSpec = ECNamedCurveTable.getParameterSpec("secp256r1")
generator.initialize(ecSpec)
val keyPair = generator.generateKeyPair()
val privateKey = keyPair.private as ECPrivateKey
val publicKey = keyPair.public as ECPublicKey
val publicEncoded = publicKey.q.getEncoded(true)
Как я могу восстановить его на другой стороне (когда у меня только 33 байта, отправленных отсюда)?
Я пробовал ниже код:
val publicKey =KeyFactory.getInstance("EC").generatePublic(X509EncodedKeySpec(publicEncoded))
Но я думаю, что это совершенно неправильно, так как я получаю:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: ошибка: 0c000079: подпрограммы кодирования ASN.1: OPENSSL_internal: HEADER_TOO_LONG
Я пытался также:
val generator = KeyPairGenerator.getInstance("ECDSA")
val ecPublicKey = generator
.generatePublic(X509EncodedKeySpec((publicEncoded))) as ECPublicKey
Но ошибка:
java.security.spec.InvalidKeySpecException: спецификация закодированного ключа не распознана
Как достичь своей цели?