【发布时间】: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 MD5 库,
MessageDigest_5.pas。它可以将动态字节数组作为输入,因此可以根据需要传递流。源代码在..\Soap\WsdlImporter中,尽管在某些 Delphi 版本(例如 XE3)中错误地省略了它。见Delphi – MD5: the MessageDigest_5 unit has been there since Delphi 2007。 -
或者你可以在这里使用直接支持流的 MD5 库,
How to do one-way hashing of an ASCII string using standard functions of Delphi?。 -
我对这个不是很熟悉,但是你看过这里吗:sourceforge.net/projects/jedi-apilib 具体来说,sourceforge.net/p/jedi-apilib/code/HEAD/tree/jwapi/trunk/…
-
命令行实用程序是
gpg- 请参阅gnupg.org。警告 - 不要安装 Gpg4Win 的怪物来签署文件,而是找到预编译的 Windows 的 gpg 二进制文件。 -
你看过MS
SignTool吗?
标签: delphi certificate cryptoapi mscapi