【问题标题】:CryptoSwift AES GCM reusibilityCryptoSwift AES GCM 可重用性
【发布时间】:2022-01-26 19:01:35
【问题描述】:

我正在阅读有关使用 CryptoSwift 实现 AES GCM 的信息,它指出 GCM 不可重用,您必须为每个加密解密会话创建一个实例。这难道不是为加密和解密双方都拥有一个 AES 密钥的目的吗?我确定有一部分我的知识太少而无法理解,所以如果有人可以向我解释这一点,那就太好了。 这是链接:CryptoSwift GCM implementation

【问题讨论】:

  • 我不太明白你在问什么。您必须为每个加密文件创建一个新的 instance 类型。一旦你完成了密码对象,它就会完成 MAC 的计算并给你一个身份验证标签。

标签: swift encryption aes aes-gcm


【解决方案1】:

不,AES 密钥可以重复使用,您只需要重新创建实例,因此您必须执行:

let gcm = GCM(iv: iv, mode: .combined)
let aes = try AES(key: key, blockMode: gcm, padding: .noPadding)

用于加密和解密(当然,在单独的函数中)。

这通常是因为iv 和这些实例的内部状态在加密/解密期间发生了变化。否则,实例需要将 IV 和其他参数保存在内存中,以便它们可以重置为初始状态。无论如何,通常在代码的单独部分中调用加密和解密函数;加密然后立即解密仅在测试期间才有意义。

密码是轻量级的对象;重用它们没有多大意义——大多数复杂的事情发生在处理数据时。相反,我们可以重复使用密钥。

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    相关资源
    最近更新 更多