Требуется базовое понимание шифрования c из существующего Android кода - PullRequest
1 голос
/ 12 февраля 2020

Я новичок в Android, и я начал работать над существующим проектом, который имеет некоторый алгоритм шифрования,

Ниже приведен существующий код

    var secureRandom = SecureRandom()
    var masterKey = ByteArray(32)
    secureRandom.nextBytes(masterKey)

    var keyGen = KeyPairGenerator.getInstance("RSA")
    keyGen.initialize(2048)

    var keyPair = keyGen.generateKeyPair()

    var pubKey = keyPair.public

    var subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(ASN1Sequence.getInstance(pubKey.encoded))
    var pubKeyEncoded = Base64.encodeToString(subjectPublicKeyInfo.parsePublicKey().encoded, Base64.DEFAULT)

    var sb = StringBuilder()
    sb.append("-----BEGIN RSA PUBLIC KEY-----\n")
    sb.append(pubKeyEncoded)
    sb.append("\n-----END RSA PUBLIC KEY-----\n")

    val publicKey = sb.toString()

    val privateKey = keyPair.private as RSAPrivateKey
    val string = StringWriter()
    var writer = PemWriter(string)
    writer.writeObject(privateKey)//<-----Getting an error like Type Mismatch
    writer.close()

Может кто-нибудь помочь мне, как решить эту проблему, я совершенно новый в этой области шифрования, кто-нибудь подскажет, откуда я могу получить более глубокое понимание криптографии,

из кода выше Я только что понял, что мы получаем два ключа, такие как publi c ключ и закрытый ключ для AES

Мы шифруем publi c ключ с помощью кода ниже

  var subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(ASN1Sequence.getInstance(pubKey.encoded))
    var pubKeyEncoded = Base64.encodeToString(subjectPublicKeyInfo.parsePublicKey().encoded, Base64.DEFAULT)

Но я все еще не понимал, что будет использовать SubjectPublicKeyInfo, ASN1Sequence, PemWriter, если кто-нибудь есть знания, тогда, пожалуйста, объясните мне.

Я также получаю ошибку во время компиляции, как Требуется PemObjectGenerator! найдено RSAPrivateKey

1 Ответ

1 голос
/ 12 февраля 2020

Я не могу помочь вам более подробно, но я обнаружил, что

PEMWriter уже устарел. Вы не получаете это сообщение, потому что вы импортируете PEMWritter из другого пакета, такого как пакет утилит

Вместо того, чтобы импортировать его из

org.spongycastle.openssl.PEMWriter

, в это время вы получите предупреждение, что оно устарело, поэтому вместо используйте ниже

JcaPEMWriter

именно с помощью следующего пакета

org.spngycastle.openssl.jcajce.JcaPEMWriter

ваша ошибка исчезнет

...