gpt4 book ai didi

C# 和德尔福。使用 C# 在 Delphi 中读取加密和压缩的 XML

转载 作者:行者123 更新时间:2023-11-30 22:42:49 24 4
gpt4 key购买 nike

我们有一个 XML 文档的加密压缩文件。此文件在 Delphi 中使用名为“DcpCrypt”的包使用 Rijndael 和 SHA256 加密:

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

C# 能够解密吗?我在谷歌上搜索了很多,似乎 DcpCrypt 计算他的 key 的方式与 .NET lib 不同。

提前致谢

最佳答案

简短的回答是肯定的。长答案是“视情况而定”。

“计算他的 key ”这句话,我假设您的意思是生成加密 key 。 key 的生成方式与使用这些 key 进行加密和解密的过程完全无关。

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

但这就是问题所在……识别这些选项并将它们设置为在加密编解码器和解密编解码器上相同可能很棘手。

有哪些选项?

  1. 链接模式;
  2. 消息是如何加盐的?如果有的话?
  3. 终止:AES 未指定非 key 流链接模式的阻塞方案。
  4. 通常,对于 AES 以外的密码,您可能还会遇到指定 key 编码方式的问题 - 但这不应该成为 AES 的问题。

一旦确定了加密器使用的所有选项,就必须将这些相同的选项应用于解密器。这个问题不是 Rijndael/AES 特有的,而是所有密码普遍存在的。

顺便说一句,如果您为了压缩目的而压缩,则压缩后的加密毫无意义。 Zip 不会压缩任何内容已经是最大随机性的文件,例如密文。

我建议您使用 TurboPower LockBox 3 在 AES 中加密,而不是 DcpCrypt。戴夫·巴顿 (Dave Barton) 的 DCPcrypt 在当时很不错,但它不是最新的标准,而且它不能安全地管理 IV。

如果您使用 LockBox,有哪些选项?如果您在 CBC 模式下使用 LockBox 3 的 AES 编解码器,则通过将 IV 设置为随机数并预先发出它来管理加盐和 IV。对于长度超过一个 block 的消息,通过窃取密文来实现阻塞。对于短于一个 block 的消息,链接模式强制为 8 位 CFB,即 key 流。

您关于使用 SHA256 加密文件的评论也没有意义。 SHA 是散列,而不是密码。

关于C# 和德尔福。使用 C# 在 Delphi 中读取加密和压缩的 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com