【问题标题】:AES encryption problem: Python pycrypt OFB = C++ Gladman CFBAES加密问题:Python pycrypt OFB = C++ Gladman CFB
【发布时间】:2011-03-02 16:29:39
【问题描述】:

在尝试让 python 应用程序使用加密链接与 C++ 应用程序对话时,我们无法让它们对话。尝试各种参数组合我们意外地发现,如果我们告诉 python 在 OFB 模式下加密,它会在 C++ 中以 CFB 模式成功解密。

python pycrypt 库和 C++ Gladman 库都备受推崇,那么哪个可能是错误的?

奇怪的是,在两端使用 OFB 或 CFB 时,第一个字节似乎可以解密。由于标准测试向量似乎只测试第一个字节(我不是这方面的专家,可能不了解测试向量),这两种算法是否有可能通过标准测试?

【问题讨论】:

  • 更新:Python OFB 到 C++ CFB 只适用于一个数据块,然后变成乱码!只有欧洲央行似乎在这两者之间正常工作。不是很安全!
  • 尝试了不同的 C++ 实现,得到了相同的数据,所以似乎是 pycrypt 出了问题。
  • 这些“标准测试向量”是什么?我敢肯定他们不只是测试第一个字节,那太愚蠢了。
  • 图书馆的链接会有所帮助。

标签: c++ python encryption aes


【解决方案1】:

PyCrypto 默认使用 8 位 CFB 模式。我猜另一端使用块大小的 CFB 模式。以位为单位的段大小由 AES.newsegment_size 关键字参数设置,对于块大小 CFB 模式,它应该是 AES.block_size*8

对于第一个块 OFB 模式与块大小 CFB 模式相同。

【讨论】:

  • 我不明白 8 位 CFB 模式是什么意思。在 CFB 模式下,一个块加密的输出成为下一个块加密的 IV。歧义在哪里? wikipedia 上对模式有很好的解释,如果不完整,也许您可​​以添加有关此段大小的内容?
  • @Richard – CFB 是 defined as a family of modes,参数 s – 段大小。所以你可以有一个 8 位的段,对于每个密码输出,你只需要高 8 位与明文进行异或。关键是,如果您有一位传输错误,您只会得到两个字节不正确,而不是两个块。
猜你喜欢
  • 2014-08-22
  • 2020-11-09
  • 2019-11-01
  • 2017-04-12
  • 2021-12-30
  • 2021-12-20
  • 2017-02-21
  • 1970-01-01
相关资源
最近更新 更多