0

我正在加密一些文本并尝试对其进行解密,但是当我使用不同的 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引起的,但我不知道如何只注册一次,所以一旦解决了它就不会再抛出异常了。

4

1 回答 1

1

我实际上发现了错误,我每次都在生成一个新的 KeySet,而我应该存储它。有关如何执行此操作的说明,请参见https://github.com/google/tink/blob/master/docs/JAVA-HOWTO.md在“存储密钥集”部分

于 2019-03-28T17:41:55.143 回答