- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我一直在尝试修复 ccrypt-j
,Linux 的纯 Java 实现 ccrypt
命令。我发现初始化 vector (IV) 存在一些问题,这使得 ccrypt 除了其自身的输出之外无法解密任何内容。
我修改了两个库,以便始终将相同的随机数提供给 Rijndael 引擎的两个实现,但是,实现之间的输出 IV 始终不同,即两个库始终具有相同的结果(因为 Rijndael 是确定性的),但这些结果始终不同。
我知道问题只是 ccrypt
生成 IV 的方式,因为:
ccrypt-j
解密ccrypt
将很好地解密它。 Ccrypt 使用自己的用 C 语言编码的 Rijndael 实现,而 ccrypt-j 使用 Bouncy CaSTLe 的实现。
编辑:2016 年 4 月 1 日
因为 IV 是在任何数据加密之前构建的(实际上,甚至读取任何数据),我相信问题必须出在 Bouncy CaSTLe 和 ccrypt 自己的实现中 Rjindael 的初始化方式上。我将尝试在两个实现中执行相同的顺序,看看会得到什么。
最佳答案
一个半答案
如果你看看旧的ccrypt,有一些关于IV的解释。如果我继续,4个字节是固定的——魔数(Magic Number)——,它暂时是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
In ccrypt, the seed is constructed as follows: first, a nonce iscontructed by hashing a combination of the host name, current time,process id, and an internal counter into a 28-byte value, using acryptographic hash function. The nonce is combined with a fixedfour-byte "magic number", and the resulting 32-byte value is encryptedby one round of the Rijndael block cipher with the given key. Thisencrypted block is used as the seed and appended to the beginning ofthe ciphertext. The use of the magic number allows ccrypt to detectnon-matching keys before decryption.
神奇数字:http://ccrypt.sourcearchive.com/documentation/1.7-7/ccryptlib_8c-source.html
似乎魔数(Magic Number)没有改变(从 1.1 到 1.10 一样,之前我不知道)。
那又怎样?
ccrypt 旨在与先前版本(emacs 等)兼容。它可以加密和解密,应用广泛。
那么问题来自于ccrypt-j。
在 sourceforge 上可以看到两件重要的事情:
1 兼容性
Encrypting a file using ccrypt-j
TODO
Decrypting a file using ccrypt-j
TODO
那么什么才是真正有效的呢?
2 事实上,它使用了 bouncy caSTLe,它使用得很好,并且确实很好地实现了标准。
所以结论?
你不能指望 ccrypt 会改变。
然后:可以通过ccrypt-j解密ccrypt
但如果想用ccrypt解密,就得限制ccrypt-j
我对你的说法表示怀疑,因为这太神奇了!
If I substitute the IV (first 32 bytes of the encrypted files) withthat of a ccrypt-encrypted file, ccrypt will decrypt it just fine.
但如果它有效,为什么不使用它呢? (ccrypt-j也能解密?)
最后建议:联系 ccrypt-j 支持
希望对你有帮助
关于java - ccrypt不会解密ccrypt-j加密的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34355450/
我在使用名为 'ccrypt' 的程序时遇到问题用于加密文件。我的使用方式如下: ccrypt -e -E $cryptograph `find . -type f | sed -n -e '$i{p
我使用 AES 256 进行加密解密,我有大约 1 - 2 GB 的较大文件,它应该经过加密和解密过程,在对下载的文件进行加密时,我收到内存警告和应用程序崩溃。所以我想知道如何逐 block 加密解密
我是一名优秀的程序员,十分优秀!