CertNameToStrW 函数 (wincrypt.h)
CertNameToStr 函数将 CERT_NAME_BLOB 结构中的编码名称转换为以 null 结尾的字符串。
字符串表示形式遵循 RFC 1779中的可分辨名称规范。 以下“备注”部分列出了此规则的例外。
语法
DWORD CertNameToStrW(
[in] DWORD dwCertEncodingType,
[in] PCERT_NAME_BLOB pName,
[in] DWORD dwStrType,
[out] LPWSTR psz,
[in] DWORD csz
);
参数
[in] dwCertEncodingType
用于对名称进行编码的 证书编码类型。 此函数忽略高 WORD 中包含的 消息编码类型 标识符。
此参数可以是以下当前定义的证书编码类型。
价值 | 意义 |
---|---|
|
指定 X.509 证书编码。 |
[in] pName
指向要转换 CERT_NAME_BLOB 结构的指针。
[in] dwStrType
此参数指定输出字符串的格式。 此参数还指定字符串内容的其他选项。
此参数可以是下列值之一。
价值 | 意义 |
---|---|
|
将丢弃所有 对象标识符(OID)。 CERT_RDN 项用逗号分隔,后跟空格(, )。 CERT_RDN 中的多个属性用空格(+)括起来的加号分隔,例如,Microsoft、Kim Abercrombie + 程序员。 |
|
OID 包含在其属性值中的等号 (=) 分隔符中。 CERT_RDN 项用逗号分隔,后跟空格(, )。 CERT_RDN 中的多个属性由加号隔开,后跟空格(+ )。 |
|
OID 转换为其 X.500 密钥名称;否则,它们与 CERT_OID_NAME_STR相同。 如果 OID 没有相应的 X.500 名称,则 OID 与 OID 前缀一起使用。
如果 RDN 值包含前导空格或尾随空格或以下字符之一,则引用 RDN 值:
|
还可以将以下选项与上述值组合在一起,以指定字符串的其他选项。
价值 | 意义 |
---|---|
|
将后跟空格(,)分隔符的逗号替换为后跟空格(; )分隔符的分号。 |
|
将逗号后跟空格 (, ) 分隔符替换为反斜杠,后跟后跟反斜杠,后跟字母 n (\r\n) 分隔符。 |
|
将括在空格 (+) 分隔符内的加号替换为单个空格分隔符。 |
|
禁用引用。 |
|
解码后,可分辨名称字符串中的 RDN 顺序将反转。 默认情况下不设置此标志。 |
|
默认情况下,CERT_RDN_T61_STRING X.500 密钥字符串将解码为 UTF8。 如果 UTF8 解码失败,X.500 密钥将解码为 8 位字符。 使用CERT_NAME_STR_DISABLE_IE4_UTF8_FLAG跳过最初尝试解码为 UTF8。 |
|
如果 pName 参数指向的名称包含电子邮件 RDN,并且电子邮件地址的主机名部分包含一个 Punycode 编码 IA5String,则名称将转换为 Unicode 等效项。
Windows Server 2008、Windows Vista、Windows Server 2003 和 Windows XP:不支持此值。 |
[out] psz
指向接收返回字符串的字符缓冲区的指针。 此缓冲区的大小在 csz 参数中指定。
[in] csz
psz 缓冲区的大小(以字符为单位)。 大小必须包含终止 null 字符。
返回值
返回转换的字符数,包括终止 null 字符。
如果 pszNULL 或 csz 为零,则返回目标字符串所需的大小。
言论
如果 psz 未 NULL,并且 csz 不为零,则返回的 psz psz 始终是以 null 结尾的字符串。
建议不要使用多组件 RDN(例如 CN=James+O=Microsoft),以避免在解码发生时可能出现的排序问题。 相反,请考虑使用单值 RDN(例如,CN=James,O=Microsoft)。
字符串表示形式遵循 RFC 1779
- 包含引号的名称括在双引号内。
- 空字符串括在双引号内。
- 包含连续空格的字符串不会括在引号中。
- CERT_RDN_ENCODED_BLOB 或 CERT_RDN_OCTET_STRING 类型的相对可分辨名称(RDN)值采用十六进制格式。
- 如果 OID 没有相应的 X.500 名称,则会在 OID 之前使用“OID”前缀。
- 如果 RDN 值包含前导空格、尾随空格或下列字符之一,则用双引号(而不是“\”)括起来:
- 逗号 (,)
- 加号 (+)
- 等号 (=)
- 英寸标记 (“)
- 反斜杠 (/)
- 小于符号 (<)
- 大于符号 (>)
- 数字符号 (#)
- 分号 (;)
- stateOrProvinceName (2.5.4.8) OID 的 X.500 密钥名称为“S”。 此值与 RFC 1779 X.500 密钥名称(“ST”)不同。
钥匙 | 对象标识符字符串 |
---|---|
E | 1.2.840.113549.1.9.1 |
T | 2.5.4.12 |
G | 2.5.4.42 |
我 | 2.5.4.43 |
锡 | 2.5.4.4 |
例子
有关使用此函数的示例,请参阅
注意
wincrypt.h 标头将 CertNameToStr 定义为一个别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将中性编码别名与不中性编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅函数原型的
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows XP [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows Server 2003 [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | wincrypt.h |
库 | Crypt32.lib |
DLL | Crypt32.dll |