ccrypt不会解密ccrypt-j加密文件

时间:2015-12-18 12:12:02

标签: java encryption bouncycastle rijndael

我一直在尝试修复ccrypt-j,这是linux ccrypt命令的纯java实现。我发现初始化向量(IV)存在一些问题,这使得ccrypt除了自己的输出之外没有解密任何东西。

我修改了两个库,以便始终将相同的随机数提供给Rijndael引擎的两个实现,但是,输出IV在实现之间总是不同的,即两个库总是具有相同的结果(因为Rijndael是确定性的),但是这些结果总是不同的。

我知道问题只是ccrypt生成IV的方式:

  1. ccrypt-j-encrypted可以从ccrypt-j
  2. 解密
  3. 如果我将IV(加密文件的前32个字节)替换为ccrypt加密文件的那个,ccrypt将解密它就好了。
  4. Ccrypt使用自己在C中编码的Rijndael实现,而ccrypt-j使用Bouncy Castle的实现。

    编辑:04/01/2016

    因为IV是在加密任何数据之前构建的(实际上,任何数据都被读取)我相信问题必须与Rounindel在Bouncy Castle和ccrypt自己的实现中初始化的方式相同。我将尝试在两个实现中执行相同的序列并查看我得到的内容。

1 个答案:

答案 0 :(得分:0)

一半答案

如果你看一下旧的ccrypt,有一些关于IV的解释。如果我恢复,4个字节是固定的 - 幻数 - ,它si c051一段时间。还讨论了有关证券的问题:

<幻>幻数:看到了 http://ccrypt.sourceforge.net/faq.html

ccrypt来自emacs / jka-compr:

http://www.opensource.apple.com/source/emacs/emacs-51/emacs/lisp/jka-compr.el

  

在ccrypt中,种子构造如下:首先,nonce是   通过哈希结合主机名,当前时间,   使用a将进程ID和内部计数器转换为28字节的值   加密哈希函数。 nonce与固定组合   四字节&#34;幻数&#34;,并且生成的32字节值被加密   通过给定密钥的一轮Rijndael分组密码。这个   加密块用作种子并附加到开头   密文。使用幻数允许ccrypt检测   解密前的非匹配密钥。

那里的幻数:http://ccrypt.sourcearchive.com/documentation/1.7-7/ccryptlib_8c-source.html

似乎魔术数字没有变化(从1.1到1.10相同,之前,我不知道)。

那又怎样?

ccrypt旨在与先前版本(emacs,...)兼容。它可以加密和解密,并被广泛使用。

然后问题来自ccrypt-j。

在sourceforge上可以看到的是两件重要的事情:

1兼容性

  

使用ccrypt-j加密文件

     

TODO

     

使用ccrypt-j

解密文件      

TODO

那真的有用吗?

事实上,它使用的是充气城堡,它使用得很好,并且肯定能很好地实现标准。

那么结论呢?

你不能希望ccrypt会改变。

然后:您可以通过ccrypt-j

解密ccrypt

但如果你想通过ccrypt解密,你必须限制ccrypt-j

我怀疑你的断言,因为它会很神奇!

  

如果我用IV替换IV(加密文件的前32个字节)   对于ccrypt加密文件,ccrypt会解密它。

但是如果它有效,为什么不使用它呢? (ccrypt-j也可以解密?)

最后建议:联系ccrypt-j支持

希望有所帮助