Как сделать открытый ключ из строки на Android для JWE? - PullRequest
1 голос
/ 27 июня 2019

У меня есть открытый ключ (RSA) в виде строки. Я хочу использовать этот ключ для создания секретного кода, скажем, незашифрованный секретный код - "ТЕСТ ТЕСТ" без кавычек.

Как этого достичь? Я имею в виду, я попробовал следующее, но застрял при создании объекта Key из строки открытого ключа Я использовал nimbus-jose-jwt библиотеку. Но не удалось создать объект открытого ключа 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:

enter image description here enter image description here

1 Ответ

0 голосов
/ 28 июня 2019

Вы должны использовать X509EncodedKeySpec для преобразования String в Открытый ключ. Вот код.

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

Надеюсь, это сработает.

...