Bouncy Kalesi'ne yüklemeye çalıştığım bir PEM kodlu Eliptik Eğri genel anahtarım var ve şu ana kadar denediğim her şey başarısız oluyor. Bu NodeJS Crypto modülü tarafından oluşturulur ve eğri adı secp521r1 olanPEM kodlu Elliptic Curve ortak anahtarları Bouncy Castle'a nasıl yüklenir?
-----BEGIN PUBLIC KEY-----
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBhsFCcWY2GaiN1BjPEd1v+ESKO6/0
D0sUR4y1amHnOr3FZx6TdqdoSBqxownQrnAKGCwagGxUb7BWwPFgHqKQJHgBq+J7
F+6m5SKAEL1wS5pqya91N7oudF3yFW8oZRE4RQRdSLl3fV2aVXKwGDXciwhUhw8k
x5OS4iZpMAY+LI4WVGU=
-----END PUBLIC KEY-----
: Bu benim yük çalışıyorum anahtarının bir örnektir. Daha sonra npm package key-encoder tarafından PEM'e kodlanmıştır. Bir imzayı doğrulamak için onu zaten JavaScript'te (ClojureScript) kullandım ve şimdi Java ile sunucudaki imzayı doğrulamam gerekiyor (aslında Clojure).
Korumaları anahtardan kaldırarak, bir bayt [] öğesine ve bir X509EncodedKeySpec oluşturmaya çalıştım. Bu işe yaramadı. O ile çöktü:
InvalidKeySpecException encoded key spec not recognised org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi.engineGeneratePublic (:-1)
Ben anahtarını yüklemek için kullanıyorum kod: Ben de denedim
(-> (KeyFactory/getInstance "ECDSA")
(.generatePublic (X509EncodedKeySpec. (.getBytes public-key))))
:
KeyFactory.
getInstance("ECDSA", "BC").
generatePublic(new X509EncodedKeySpec(publicKey.getBytes()))
Ne olur ne olmaz, bu benim Clojure kodudur PKCS8EncodedKeySpec ama hatayı aldım:
Ben de burada bu yöntemi denedi: https://gist.github.com/wuyongzheng/0e2ed6d8a075153efcd3#file-ecdh_bc-java-L47-L50 ama decodePoint çalıştırırken hata alıyorum: on korumaları ile
IllegalArgumentException Invalid point encoding 0x2d org.bouncycastle.math.ec.ECCurve.decodePoint (:-1)
: Muhafızları ve kaldırıldı
IllegalArgumentException Invalid point encoding 0x4d org.bouncycastle.math.ec.ECCurve.decodePoint (:-1)
.
Neyi yanlış yaptığımı veya nasıl düzelteceğimi biliyor musunuz?
Ayrıca, yardımcı durumunda, bu özel anahtardır:
-----BEGIN EC PRIVATE KEY-----
MIHbAgEBBEEjNeo52qeffbIQvSxRcWAPlyJjeEOov2JNxxwWKCtlowi07HsYNNyE
jFDdSn8tSYAGx0rROrgpGuuJoG0zarPKz6AHBgUrgQQAI6GBiQOBhgAEAYbBQnFm
NhmojdQYzxHdb/hEijuv9A9LFEeMtWph5zq9xWcek3anaEgasaMJ0K5wChgsGoBs
VG+wVsDxYB6ikCR4AaviexfupuUigBC9cEuaasmvdTe6LnRd8hVvKGUROEUEXUi5
d31dmlVysBg13IsIVIcPJMeTkuImaTAGPiyOFlRl
-----END EC PRIVATE KEY-----
ve her şey geçerli gibi görünüyor:
$ openssl ec -in private.pem -pubout
read EC key
writing EC key
-----BEGIN PUBLIC KEY-----
MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBhsFCcWY2GaiN1BjPEd1v+ESKO6/0
D0sUR4y1amHnOr3FZx6TdqdoSBqxownQrnAKGCwagGxUb7BWwPFgHqKQJHgBq+J7
F+6m5SKAEL1wS5pqya91N7oudF3yFW8oZRE4RQRdSLl3fV2aVXKwGDXciwhUhw8k
x5OS4iZpMAY+LI4WVGU=
-----END PUBLIC KEY-----