1

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

如何做到这一点?nimbus-jose-jwt我的意思是我尝试了以下但坚持从我使用库的公钥字符串创建 Key 对象。但无法在以下代码中创建 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但相同的库,我无法从我得到的公钥字符串成功创建公钥对象。

这是我使用但未能实现我想要的并且能够正确加密 TEST TEST 的代码片段。

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 等效代码:

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

0

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

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

希望它会奏效。

于 2019-06-28T06:29:47.407 回答