Ошибка дешифрования после регистрации AeadConfig более одного раза? - PullRequest
0 голосов
/ 28 марта 2019

Я шифрую некоторый текст и пытаюсь расшифровать его, однако он не может расшифровать, когда я использую другой AeadConfig.register () для расшифровки, чем для шифрования.Мне интересно, как решить эту проблему, потому что я буду шифровать одно действие и расшифровывать другое.Я упростил его ради приведенного ниже примера.

Это работает, если я просто передаю aead в качестве параметра, но я не уверен, что это то, что я должен делать.

private fun deletableEncrypt() {

    AeadConfig.register()

    val keysetHandle: KeysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM)
    val aead: Aead = AeadFactory.getPrimitive(keysetHandle)

    val plainText = "Hello world"
    val aad = "masterpassword"

    val cipherText = aead.encrypt(plainText.toByteArray(), aad.toByteArray())

    Log.d(TAG, cipherText.toString())

    dbHelper.insertNewRow("text", cipherText,
        "moreText")
}

private fun deleteableDecrypt() {

    AeadConfig.register()

    val keysetHandle: KeysetHandle = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM)
    val aead: Aead = AeadFactory.getPrimitive(keysetHandle)

    val aad = "masterpassword"

    val cipherText = dbHelper.getAllEncrypts()[0]

    val decrypted = aead.decrypt(cipherText, aad.toByteArray())
}

Прямо сейчас дешифрование вызывает исключение.Я думаю, что это вызвано aeadConfig, но я не знаю, как зарегистрировать его только один раз, поэтому, как только это будет решено, оно больше не вызовет исключения.

1 Ответ

1 голос
/ 28 марта 2019

Я на самом деле обнаружил ошибку, я генерирую новый KeySet каждый раз, когда вместо этого я должен хранить его. Инструкции о том, как это сделать, можно найти здесь https://github.com/google/tink/blob/master/docs/JAVA-HOWTO.md в разделе «Хранение ключей»

...