Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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 如何在android上为JWE从字符串生成公钥?_Java_Android_Security_Kotlin_Jwe - Fatal编程技术网

Java 如何在android上为JWE从字符串生成公钥?

Java 如何在android上为JWE从字符串生成公钥?,java,android,security,kotlin,jwe,Java,Android,Security,Kotlin,Jwe,我有一个公钥(RSA)作为字符串。我想用这个密钥创建一个密码,假设未加密的密码是“TEST TEST”,没有qoutes 如何做到这一点?我的意思是,我尝试了以下方法,但仍然坚持从公钥字符串创建Key对象 我使用了nimbusjosejwtlibrary。但无法在以下代码中创建RSA公钥对象 // Create the header val header = JWEHeader(JWEAlgorithm.RSA1_5, EncryptionMethod.A256CBC_HS512

我有一个公钥(RSA)作为字符串。我想用这个密钥创建一个密码,假设未加密的密码是“TEST TEST”,没有qoutes

如何做到这一点?我的意思是,我尝试了以下方法,但仍然坚持从公钥字符串创建Key对象 我使用了
nimbusjosejwt
library。但无法在以下代码中创建RSA公钥对象

// Create the header
        val header = JWEHeader(JWEAlgorithm.RSA1_5, EncryptionMethod.A256CBC_HS512)

// Set the plain text
        val payload = Payload(decryptedText)

// Create the JWE object and encrypt it
        val jweObject = JWEObject(header, payload)

        jweObject.encrypt(JWEEncrypter)

// Serialise to compact JOSE form...
        val actual = jweObject.serialize()
我还使用了另一个名为
org.bitbucket.b_c:jose4j
的库,但同样的,我无法从获得的公钥字符串成功创建公钥对象

下面是我使用的代码片段,但未能实现我想要的,并且能够正确加密测试

val jwe = JsonWebEncryption()

jwe.payload = decryptedText
jwe.algorithmHeaderValue = KeyManagementAlgorithmIdentifiers.RSA1_5
jwe.encryptionMethodHeaderParameter = ContentEncryptionAlgorithmIdentifiers.AES_256_CBC_HMAC_SHA_512
jwe.key = stringToRSAPublicKey(publicKey)
val serializedJwe = jwe.compactSerialization
公钥字符串如下所示

"MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQBGvNkLnetAtR+QSttxIkQ9" +
"mH7pbbjl2UqRu5UDO9kuEiYh4b70JxPN8v1exkuW/FLmxKjdRVq7gNWstumIGm1W" +
"8cf4RtFj88pvZUaVg6NZ21iLAIHtnhb2D/4eBOI8HXdhdZ+bEd+BJbu1rlqm0Rs1" +
"1jzYukR35/n44me3fbP9DH3JmSM8s0F8RmlIY0VqDnSOCOazNupVtJQFWeDIyfcV" +
"/coW+RRrFq5KNwnHPxdl5o3PR3OZgV27H/eBuKxIEGvjBUYchSjAAdJYAnfISvcd" +
"huLeYocZGi5WHEswrQBoUG8GflcdMJTvtTL5PtJG2WdcurIQA6iD2fSdBgQpARJF" +
 "AgMBAAE=
简而言之,我需要将iOS代码中的代码转换为android等效代码:


您应该使用X509EncodedKeySpec将字符串转换为公钥。这是代码

val keySpecPublic = X509EncodedKeySpec(Base64.decode(publicKeyString, Base64.DEFAULT))
val publicKey = KeyFactory.getInstance("RSA").generatePublic(keySpecPublic) as RSAPublicKey

希望它能工作。

您应该使用X509EncodedKeySpec将字符串转换为公钥。这是代码

val keySpecPublic = X509EncodedKeySpec(Base64.decode(publicKeyString, Base64.DEFAULT))
val publicKey = KeyFactory.getInstance("RSA").generatePublic(keySpecPublic) as RSAPublicKey

希望它能起作用。

但是公钥不是X509EncodedKeySpec,它是属于
RSAPublicKeySpec的
我怎么知道?他们刚刚将公钥发送给meHi,您尝试过解决方案吗?但是公钥不是X509EncodedKeySpec,它是属于
RSAPublicKeySpec
的,我怎么知道?他们刚把公钥发给meHi,你试过解决方案了吗?