【问题标题】:How can I encrypt Rijndael with CFB Mode, Blocksize of 256 bit and Bouncycastle?如何使用 CFB 模式、256 位块大小和 Bouncycastle 加密 Rijndael?
【发布时间】:2011-12-26 22:52:53
【问题描述】:

我正在尝试使用 rijndael 加密字符串(密钥大小 256 位,块大小 256 位,CFB 模式) 目前我正在做这样的事情:

BufferedBlockCipher c = new BufferedBlockCipher(new CFBBlockCipher(new RijndaelEngine(256), 256));
    c.init(false, new ParametersWithIV(new KeyParameter(keybytes), iv));

我可以很好地加密和解密我自己的东西。不幸的是,我必须解密的字符串来自 php 中的 mcrypt。

我无法解密这个字符串,我猜失败在我这边。谁能给我一个示例如何使用所需参数配置密码?

编辑:

遵循此处和 php 文档 cmets 中的一些建议。我将密码更改为:

PaddedBufferedBlockCipher c = new PaddedBufferedBlockCipher(new CFBBlockCipher(new RijndaelEngine(256)), new ZeroBytePadding());

加密仍然不兼容。

编辑 2

让它在 CBC 模式下工作。我猜问题出在 iv 的某个地方。

【问题讨论】:

  • 我做了一个 php-java 加密/解密并且很难做到。据我记得,我必须对输入进行填充才能使交叉加密/解密工作。
  • 似乎填充不是问题。
  • 您确定您在 Java 中使用的 IV 与您在 PHP 中使用的 IV 相同吗?另请阅读:stackoverflow.com/questions/7821678/…
  • 是的,目前(用于测试)iv 是硬编码的。出于偏执,我们从 base64 字符串生成它。钥匙也是如此。相同的键,相同的 iv ...
  • 零填充不是一个好的方案,因为如果数据以 00h 结尾,你就会遇到麻烦。只有在解密前知道纯数据的长度时,才能使用零填充。如果您正在解密,您始终可以尝试在没有填充方案的情况下进行解密,并查看内容和填充字节的外观。如果它们与预期不同,则不是填充。然而,密钥或 IV 似乎更有可能存在解码或解释差异。我们需要更多代码来查看那里发生了什么。

标签: java encryption bouncycastle rijndael


【解决方案1】:
PaddedBufferedBlockCipher c = new PaddedBufferedBlockCipher(new CFBBlockCipher(new RijndaelEngine(256), 8), new ZeroBytePadding());
c.init(false, new ParametersWithIV(new KeyParameter(keybytes), iv));

这成功了。所有示例和教程都说 CFBBlockCipher 对象的第二个参数是 chiffre 的块大小,这将起作用,但 mcrypt 使用 8 位的块大小进行 CFB。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多