Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption 多次注册AeadConfig后解密失败?_Encryption_Kotlin_Tink - Fatal编程技术网

Encryption 多次注册AeadConfig后解密失败?

Encryption 多次注册AeadConfig后解密失败?,encryption,kotlin,tink,Encryption,Kotlin,Tink,我正在加密一些文本并试图对其解密,但是当我使用不同的AeadConfig.register()进行解密而不是加密时,它无法解密。我想知道如何解决这个问题,因为我将在一个活动中加密,在另一个活动中解密。为了在下面给出一个例子,我简化了它 如果我只是将aead作为参数传递,这是可行的,但我不确定这是否是我应该做的事情 private fun deletableEncrypt() { AeadConfig.register() val keysetHandle: KeysetHan

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

我实际上发现了错误,我每次都会生成一个新的密钥集,而我应该存储它。有关如何执行此操作的说明,请参见此处的“存储密钥集”部分