【发布时间】:2016-03-25 03:40:03
【问题描述】:
我一直在尝试修复ccrypt-j,这是 linux ccrypt 命令的纯 java 实现。我发现初始化向量 (IV) 存在一些问题,这使得 ccrypt 除了它自己的输出之外什么都解密。
我修改了这两个库,以便始终将相同的 nonce 提供给 Rijndael 引擎的两个实现,但是,实现之间的输出 IV 始终不同,即两个库始终具有相同的结果(因为 Rijndael 是确定性的),但是这些结果总是不同的。
我知道问题只是 ccrypt 生成 IV 的方式,因为:
- ccrypt-j-encrypted 可以从
ccrypt-j解密 - 如果我将 IV(加密文件的前 32 个字节)替换为 ccrypt 加密文件的 IV,
ccrypt将很好地解密它。
Ccrypt 使用自己用 C 编码的 Rijndael 实现,而 ccrypt-j 使用 Bouncy Castle 的实现。
编辑:2016 年 4 月 1 日
因为 IV 是在加密任何数据之前构建的(实际上,甚至读取任何数据)我认为问题必须出在 Bouncy Castle 和 ccrypt 自己的实现中初始化 Rjindael 的方式上。我将尝试在两种实现中执行相同的序列,看看我得到了什么。
【问题讨论】:
-
你的问题是什么?
-
这可能是什么原因?
-
嗯,你已经得到了它们的来源。我会比较 IV 生成部分。
-
IV 是用 Rijndael 加密 nonce 和密码的结果。 BC 和 ccrypt 的 Rijndaels 是完全不同的实现,流程也大不相同。这就是我在这里的原因。所以也许更熟悉 Rijndael 的人可以帮助我。
-
最好向两个项目提交错误报告。
标签: java encryption bouncycastle rijndael