SOLVED : Android, Generate Diffie Hellman Public Key received as BigInteger (error : invalid DH public key)

SOLVED : Android, Generate Diffie Hellman Public Key received as BigInteger (error : invalid DH public key)

我有一个应用程序 android 在 kotlin 和一个 Python 在 raspberry-Pi 上。

在我的 android 应用程序中,我从我的树莓派收到 PublicKey 作为 大整数字符串,我需要将它转换为 PublicKey 以继续我的 Diffie赫尔曼.

使用 Android 5.0 API 21 效果很好,但不适用于 Android 8.0 API 26, 我在 generatePublic 上出现以下错误:由“com.android.org.bouncycastle.jcajce.provider.asymmetric.util.ExtendedInvalidKeySpecException 引起:invalid DH public key

fun setReceivePublicKey(PublicKey: String?){
        if(PublicKey != null) {
            receivePublickeyInteger = PublicKey.toBigInteger(10)
            val kf : KeyFactory  = KeyFactory.getInstance(algorithm)
            val spec = DHPublicKeySpec(receivePublickeyInteger,p, g)
            receivePublicKey = kf.generatePublic(spec)
        }
    }

Receive PublicKey : "1186077227678271540134862509873546604676586024525309469618216434360152823434999056481566892156846842514101786948011297818911589672275028242935710062913875151954912314844969895542136815935639151551824495652302435339103572121293460269849673020899573708935559027341320000586684514537431365310888999481071742463382911267789320258863598830395069544603326989392097657769707348691804224452973533413701448224774045051066571001832939497012508127767764295590745468802146946779724762449738116225105818944048461975843796127501652102207854858881733445450269991549328843268527039094247517538751801284281148484990234735369353511299021673752336297213365909273938355910119789784912925756917470664241207684485528488651231599946627996206087756203382782153653973676758525394929513362198592517449044771216536426414806442100590541816453615234374853999116975727517908588868986511359049342004004550720151991928954078445791206686994303438508485508357012971719850862634083256955999083221834362 950792135463522604929254266546089700839060745995960677398

P : 5809605995369958062791915965639201402176612226902900533702900882779736177890990861472094774477339581147373410185646378328043729800750470098210924487866935059164371588168047540943981644516632755067501626434556398193186628990071248660819361205119793693985433297036118232914410171876807536457391277857011849897410207519105333355801121109356897459426271845471397952675959440793493071628394122780510124618488232602464649876850458861245784240929258426287699705312584509625419513463605155428017165714465363094021609290561084025893662561222573202082865797821865270991145082200656978177192827024538990239969175546190770645685893438011714430426409338676314743571154537142031573004276428701433036381801705308659830751190352946025482059931306571004727362479688415574702596946457770284148435989129632853918392117997472632693078113129886487399347796982772784615865232621289656944284216824611318709764535152507354116344703769998514148343807

G : 2

算法:"DH"

以后的版本会做更多更好的验证。其中一项检查是确保 2 < y < p-2,其中 y 是收到的 public 密钥,并且您未通过该检查,因此出现异常。如您所见,您收到的 public 密钥比 p 大得多,这表明您的系统某处存在错误。