#encryption #kotlin #tink
#шифрование #kotlin #звон
Вопрос:
Я шифрую некоторый текст и пытаюсь его расшифровать, однако он не расшифровывается, когда я использую другой 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:
На самом деле я обнаружил ошибку, я каждый раз генерирую новый набор ключей, когда вместо этого я должен его сохранять. Инструкции о том, как это сделать, находятся здесь https://github.com/google/tink/blob/master/docs/JAVA-HOWTO.md в разделе «Хранение наборов ключей»