3

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

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

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

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

更新:这是我正在寻找的东西,但用 C 语言编写:http: //blogs.msdn.com/b/alejacma/archive/2008/01/23/how-to-sign-and-验证与cryptoapi-and-a-user-certificate.aspx

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

4

1 回答 1

4

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

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

签署XML,是什么意思?

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

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

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

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

外部参考

于 2014-02-12T11:22:07.520 回答