【问题标题】:Golang generate same encryption across different machinesGolang 在不同的机器上生成相同的加密
【发布时间】:2017-03-14 03:39:55
【问题描述】:

我有一个使用 crypto/aes 加密和解密明文的 go 脚本。

https://play.golang.org/p/le_-uuzWN4

我希望这个脚本可以在不同的机器上使用并生成相同的加密文本。我认为通过使用自定义 IV,无论在哪里,它都会产生一致的加密。 现在它在 go playground 和 https://repl.it/languages/go 上产生不同的结果@

是否有可能产生一致的加密,或者由于内部实现(如加密盐等)而总是不同的。

另外,IV到底是什么,我仍然对此感到困惑。文档并没有真正解释它是什么

【问题讨论】:

  • IV 是随机数。重复使用 IV 会破坏其目的,并且可能会破坏您的加密。
  • 现在更有意义了。这是否意味着无法生成相同的一致加密?
  • 不安全,您为什么要这样做?产生可预测的输出违背了加密它的目的。这听起来像你有一个不同的问题要解决。您是否正在寻找加密哈希函数?
  • 我认为您可以使用用户名的哈希来生成可预测的 IV,但我觉得单独使用哈希会更安全。
  • 如果您在 CFB 模式下加密,请勿重复使用 IV。正如 JimB 所说,当密钥保持不变时,它只能使用一次。如果 IV 被重复使用,那么您正在创建一个 multipad,攻击者只能通过了解明文的某些属性来使用它来恢复完整的明文。

标签: encryption go aes


【解决方案1】:

我知道为什么它每次都会生成不同的密文。 IV 是用这个语句随机化的

if _, err := io.ReadFull(rand.Reader, iv); err != nil {
    panic(err)
}

删除它将保持 IV 不变,并且在任何机器上给定相同的密钥和 IV 时都会生成相同的加密

【讨论】:

  • 不要这样做。只需在加密数据前加上 IV 即可在解密时使用,IV 不需要保密。
  • 这在某些实现中确实是必需的。例如,我在我的一个应用程序中使用 PayTM 作为支付网关,并且应该修复 IV。
猜你喜欢
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 2013-05-12
  • 2021-12-31
  • 2010-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多