2010-11-18 44 views
2

我们已经对XML文档进行了加密,然后进行了压缩。该文件在Delphi加密了一个名为 'DcpCrypt' 包,使用Rijndael算法和SHA256:C#和Delphi。阅读XML加密并使用C#在Delphi中压缩文件

fRijndael:=TDCP_rijndael.Create(nil); 
fRijndael.BlockSize:=16; 
fRijndael.CipherMode:=cmCBC; 
fSHA256:=TDCP_sha256.Create(nil); 
fSHA256.HashSize:=256; 

是C#能够uncrypting这个的?我google了很多,似乎DcpCrypt计算他的键与.NET库不同。

非常感谢提前

+1

是的。最坏情况:编写一个Delphi DLL,你可以从C#调用它解密它。幸运的是,有几种针对C#的加密/解密解决方案,甚至压缩/解压缩也不成问题。我只是不知道你可以使用哪些。 – 2010-11-18 11:31:00

回答

3

简短的回答是肯定的。长的答案是“这取决于”。通过单词“计算他的密钥”,我假设你的意思是生成加密密钥。如何生成密钥与使用密钥进行加密和解密的过程完全无关。

DcpCrypt是在Rijndael成为AES标准(很久以前)之前编写的。假设预标准Rijndael实现与AES(可能是)相同,则AES加密/解密互操作性应该是语言和实现中立,只取决于实现选项。

但是,这里是擦...识别这些选项,并将它们设置为相同的加密编解码器和解密编解码器可能会很棘手。

有什么选择?

  1. 链接模式;
  2. IV
  3. 消息如何被盐渍?如果有的话?
  4. 终止:AES不指定非密钥流式链接模式的阻塞方案。
  5. 通常,使用除AES以外的密码时,指定密钥编码方式也可能存在问题 - 但这不应该是AES的问题。

一旦确定了加密器使用的所有选项,就必须将相同的选项应用于解密器。这个问题并不是Rijndael/AES所特有的,但对所有密码都是通用的。顺便说一下,如果你为了压缩的目的而压缩,那么压缩之后的加密是毫无意义的。 Zip不会压缩任何内容已经是最大随机的文件,例如密文。

我建议您使用TurboPower LockBox 3在AES中进行加密,而不是使用DcpCrypt进行加密。 Dave Barton的DCPcrypt当天表现不错,但与标准并不一致,并且它不能安全地管理IV。

如果您使用LockBox,有什么选择?如果您在CBC模式下使用LockBox 3的AES编解码器,则通过将IV设置为随机数并预先发射来管理salting和IV。对于超过一个块的消息,通过密文窃取实现阻塞。对于短于一个块的消息,链接模式被强制为8位CFB,这是密钥流式传输。

此外,您对SHA256加密文件的评论没有任何意义。 SHA是散列,而不是密码。

+0

肖恩,你在回复中提供了一些非常有用的信息。我遇到过这种搜索有关LockBox加密与标准加密选项相比的信息。例如,我想用LockBox加密某些东西,并能够使用OpenSSL.exe对其进行解密。有没有办法可以直接与您联系?我可能最终在SO上发布另一个问题。如果我这样做,我会编辑这个评论与我的问题的链接。我担心的是,我现在有很多问题。 ;)谢谢 – 2012-02-08 23:51:00

+0

LockBox在lockbox.seanbdurkin.id.au有一组活跃的论坛。你可以在那里发布你的问题。 LB3还包含一个OpenSSL的包装器,但只涉及其符号和验证功能,而不是加密/解密功能。 - 但即使如此,我也许能够帮助你。 – 2012-02-09 00:21:01

+0

也看到这个问题和答案: http://stackoverflow.com/questions/9188045/how-to-aes-128-encrypt-a-string-using-a-password-in-delphi-and-decrypt-in -c/9203567#9203567 – 2012-02-09 00:23:36