将 null 终止的 unicode 字符串传递给方法 DRMSetRevitationPoint

发布于 2024-12-20 01:24:12 字数 1440 浏览 1 评论 0原文

我正在使用 Microsoft 的 AD RMS SDK 来执行文档加密和撤销用户权限。

要执行撤销,我需要使用方法 DRMSetReplicationPoint 。我需要传入我在签署 XML 撤销列表时使用的公钥(该列表已创建并签名)。该参数是 PWSTR,因此我尝试传递在 XML 中看到的公钥的值,但我认为它不正确(从 Office 调用列表时收到错误)。我所追求的是将密钥传递给该方法的正确方法。我发现在 SDK 中的(类似)方法的文档中,此参数以以下方式记录:

DRMGetReplicationPoint 中的 wszPublicKey:

指向以 null 结尾的 Unicode 字符串的指针,该字符串接收可选的公钥以标识外部的撤销列表 内容的信任链。该缓冲区的大小由 puPublicKeyLength 参数。

DRMSetUsagePolicy 中的 wszPublicKey:

*指向以 null 结尾的 Unicode 字符串的指针,该字符串包含用于签署或需要的应用程序摘要的公钥 禁止行使权利。该字符串必须是格式良好的 XrML 节点。当eUsagePolicyType包含时需要该参数 DRM_USAGEPOLICY_TYPE_BYPUBLICKEY。对于所有其他内容,它都会被忽略 eUsagePolicyType 值。*

我正在查看有关这些方法的该字段的文档,因为它们还有更多内容需要继续。我所追求的是获取我拥有的密钥并将其推入方法的正确方法 - 任何建议都会很棒。签名撤销列表中的公钥如下:

<PUBLICKEY>
<ALGORITHM>RSA</ALGORITHM> 
<PARAMETER name="public-exponent">
<VALUE encoding="integer32">65537</VALUE> 
</PARAMETER>
<PARAMETER name="modulus">
<VALUE encoding="base64" size="1024">8Rk8Gx2bG6ML5y/RDjyHpFwhU0g/JYNOpewEsAMw+SndTaWCAPRDZr+NVzOorrBcycVenJd9XupQndStvDN0dID+nVAL8ZwCaFtzcW74g9YRDlHWnld1SOo7VysXKC3mkLvl64CPQMzM1MlmLZ3J9vkCpiOYV/8Xu0lAcpbRdLg=</VALUE> 
</PARAMETER>
</PUBLICKEY>

I'm using Microsoft's AD RMS SDK to perform document encryption and revocation of user rights.

To perform revocation I need to use the method DRMSetRevocationPoint . I need to pass in the Public Key I've used in signing an XML revocation list (the list has been created, and signed). The argument is a PWSTR so I've tried passing the value of the public key that I see in the XML but I think it's incorrect (receiving an error when the list is called from Office). What I'm after is the correct way to pass the key to this method. I've found that in documentation for (similar) methods in the SDK this argument is documented in the following ways:

wszPublicKey in DRMGetRevocationPoint:

A pointer to a null-terminated Unicode string that receives the optional public key to identify a revocation list outside the
content's chain of trust. The size of this buffer is specified by the
puPublicKeyLength parameter.

wszPublicKey in DRMSetUsagePolicy:

*A pointer to a null-terminated Unicode string that contains the public key used to sign the digest of the application required to or
prohibited from exercising rights. This string must be a well-formed
XrML node. This parameter is required when eUsagePolicyType contains
DRM_USAGEPOLICY_TYPE_BYPUBLICKEY. It is ignored for all other
eUsagePolicyType values.*

I'm looking at the documentation of this field on these methods as they have a bit more to go on. What I'm after is the correct way to take the key I have and push it into the method - any advice would be great. The public key from the signed revocation list is as follows:

<PUBLICKEY>
<ALGORITHM>RSA</ALGORITHM> 
<PARAMETER name="public-exponent">
<VALUE encoding="integer32">65537</VALUE> 
</PARAMETER>
<PARAMETER name="modulus">
<VALUE encoding="base64" size="1024">8Rk8Gx2bG6ML5y/RDjyHpFwhU0g/JYNOpewEsAMw+SndTaWCAPRDZr+NVzOorrBcycVenJd9XupQndStvDN0dID+nVAL8ZwCaFtzcW74g9YRDlHWnld1SOo7VysXKC3mkLvl64CPQMzM1MlmLZ3J9vkCpiOYV/8Xu0lAcpbRdLg=</VALUE> 
</PARAMETER>
</PUBLICKEY>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谁对谁错谁最难过 2024-12-27 01:24:12

您没有显示任何代码,但 PWSTR 是一个 wchar_t 指针,在 Windows 上它是一个 Unicode (UTF-16) 字符串(wchar_t 字符)。要使用字符串文字执行此操作,您需要在字符串之前放置一个 L,即 L"Hello world",但如果您在代码中执行此操作,您需要一些东西类似于 std::wstring 并使用其 c_str() 成员来获取指针。

You don't show any code, but a PWSTR is a wchar_t pointer, which on Windows is a Unicode (UTF-16) string (of wchar_t characters). To do this with a string literal you need to put an L before the string, i.e. L"Hello world", but if you're doing this in code you want something like a std::wstring and to use its c_str() member to obtain the pointer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文