Saya mengenkripsi beberapa teks dan mencoba mendekripsinya, namun gagal mendekripsi ketika saya menggunakan AeadConfig.register() yang berbeda untuk mendekripsi daripada mengenkripsi. Saya bertanya-tanya bagaimana cara mengatasi masalah ini karena saya akan mengenkripsi satu aktivitas dan mendekripsi di aktivitas lain. Saya telah menyederhanakannya demi memberikan contoh di bawah ini.

Ini berfungsi, jika saya hanya melewatkan aead sebagai parameter, tetapi saya tidak yakin apakah itu sesuatu yang harus saya lakukan.

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())
}

Saat ini dekripsi melempar pengecualian. Saya pikir itu 'disebabkan oleh aeadConfig, tetapi saya tidak tahu cara mendaftarkannya hanya sekali, jadi setelah ini diselesaikan, itu tidak akan menimbulkan pengecualian lagi.

0
user9333933 28 Maret 2019, 20:15

1 menjawab

Jawaban Terbaik

Saya benar-benar menemukan kesalahan, saya membuat KeySet baru setiap kali, padahal saya harus menyimpannya. Petunjuk tentang cara melakukannya dapat ditemukan di sini https://github .com/google/tink/blob/master/docs/JAVA-HOWTO.md di bagian "Menyimpan Keyset"

1
user9333933 28 Maret 2019, 17:41