【问题标题】:Signing a document using MS cryptoAPI with Delphi使用 MS cryptoAPI 和 Delphi 签署文档
【发布时间】:2014-02-08 10:46:13
【问题描述】:

我试图在 Delphi 中找到一些关于如何使用 Microsoft CryptoAPI 对数据进行签名的完整示例。在网上我发现主要是 sn-ps 和伪代码,但没有具体的例子说明如何做到这一点。

据我了解,在花了一天时间寻找代码和信息后,您可以根据公钥创建文档/文件的哈希值(如果您自行生成一对,或者由钥匙链)。然后将此哈希编码到加密的输出文件(容器部分)中,并且可以由持有私钥的接收者验证和解码。

如果不存在 Delphi 示例,是否有任何免费的命令行程序可用于签署文件/文档?

我找到了用于 MD5/SHA1 散列的代码,以及使用密码字符串加密文件的代码(从动态生成的 keypar 派生散列)。但遗憾的是没有签署流或文件。 谷歌上最接近的匹配是 Turbopower (LockBox) 的旧产品,但我不知道生成的输出是否与 MS cryptoAPI (?) 兼容

更新: 这与我正在寻找的内容类似,但用 C 语言编写: http://blogs.msdn.com/b/alejacma/archive/2008/01/23/how-to-sign-and-verify-with-cryptoapi-and-a-user-certificate.aspx

此外,当您将问题降级时,请充分说明您这样做的原因。对于您在大型企业应用程序中面临的问题,对于 Delphi 来说这是一个完全有效的问题。

【问题讨论】:

标签: delphi certificate cryptoapi mscapi


【解决方案1】:

我知道实际回答您自己的问题是一种不好的形式,但由于在 Delphi 下似乎没有什么“动手”示例,所以我决定在这里发布我发现的内容以帮助其他人。

安全、证书和签名是一个庞大而复杂的主题,需要认真研究,所以请原谅我这篇文章的简单性。它只是为了给人们指明正确的方向。

签署 XML,是什么意思?

用非常简单的实践术语来说,这就是发生的事情:

  • 您生成 XML 文档的 HASH(例如 MD5,或 SHA1)
  • 您使用私钥加密此 HASH,或者生成 由您自己或由您的证书提供/派生
  • 一个新的 XML 节点(DSIG 签名)被插入到包含加密哈希(以及更多)的文档中

为了验证 XML 文档没有被篡改,阅读器必须使用公钥来解码 HASH 值。因此,阅读器软件必须生成同一文档的哈希(减去附加的 XML),并将其与文档中嵌入的(解密的)值进行比较。如果这些匹配,那么我们就知道文档是完整的。只有当你使用有效的密钥来解密附加的哈希时,它才会匹配。

由于这是一项乏味的工作(它包括很多步骤,例如在密钥库中查找提供程序 [在我的情况下] 等等),我最终从 ELDOS (SecureBlackBox) 购买了现成的 VCL 组件,节省了我很多时间。

外部参考

【讨论】:

  • 回答自己的问题也不错。
猜你喜欢
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2023-04-11
  • 1970-01-01
相关资源
最近更新 更多