XML 数字签名加密扩展

CryptXML 允许开发人员通过注册系统范围的加密扩展 DLL 来扩展本机支持的加密算法。 扩展 DLL 扩展 SignatureMethod 支持的算法,并 DigestMethod XML 元素。 扩展 DLL 可以支持将其他参数编码为 XML 数字签名的算法。

所有扩展 DLL 都必须支持 CryptXmlDllGetInterface 函数,该函数返回指向 CRYPT_XML_CRYPTOGRAPHIC_INTERFACE 结构的指针。 此结构提供用于实现的加密扩展函数的函数指针。 支持的函数取决于支持的加密算法类型以及算法是否必须将参数编码为 XML 数字签名。

加密扩展函数包括以下函数指针:

必需函数

Digest 方法函数

签名方法函数

对于具有默认编码参数的算法

加密扩展 DLL 在系统范围内注册。 注册加密扩展 DLL 需要管理员权限。

所有 CryptXML 加密扩展均由 SignatureMethod 中设置的 URI 值或 DigestMethod 元素的算法属性字段注册。

扩展 DLL 的注册表路径如下所示:

32 位

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\CryptXML\URI\{uri}

64 位

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\CryptXML\URI\{uri}

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432NODE\Microsoft\Cryptography\CryptXML\URI\{uri}

每个密钥包含以下设置。

名字 类型 数据
DLL
可展开字符串
必填。
XML 加密提供程序 DLL 的绝对路径。
**注意:**我们建议加密扩展 DLL 位于只能由具有管理权限的应用程序写入的目录中。
LoadLibrary 用于加载加密扩展 DLL。
名字
字符串 自选。
与此 URI 关联的显示名称。
GroupId
DWORD 必填。
与此加密算法关联的组标识符。 可能的值包括:CRYPT_XML_GROUP_ID_HASH<强> = 1
CRYPT_XML_GROUP_ID_SIGN<强> = 2
CNGAlgid
字符串 必填。
要传递给 BCrypt 或 NCrypt 函数的 CNG 算法名称。
CNGExtraAlgid
字符串 自选。
除了 CNGAlgid 成员中的字符串外,还可以传递给 CNG 函数的额外算法字符串。
对于签名算法(CRYPT_XML_GROUP_ID_SIGN),此成员是传递给 CNG 函数的公钥算法字符串。
对于 GroupId 的其他值,请将 pwszCNGExtraAlgid 成员设置为空字符串 L“”。

 

XML 数字签名加密算法