使用CryptoAPI将UTF8String编码为ASN1

时间:2016-12-09 15:54:09

标签: c cryptoapi

我使用此代码在ASN1中编码UTF8String:

const char *charExtensionValue = "test value тест тест with some cyrillic symbols";

CERT_NAME_VALUE myNameValue;
myNameValue.dwValueType = CERT_RDN_UTF8_STRING;
myNameValue.Value.cbData = (DWORD)(strlen(charExtensionValue)+1)*2;
myNameValue.Value.pbData = (LPBYTE)charExtensionValue;

CERT_BLOB encodedBlob;

bool checkASN1Encoding = CryptEncodeObjectEx(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, X509_ANY_STRING, &myNameValue, CRYPT_ENCODE_ALLOC_FLAG, NULL, &encodedBlob.pbData, &encodedBlob.cbData);

CryptEncodeObjectEx运行良好,没有任何错误,但结果不是预期的:

OCTET STRING, encapsulates {
   UTF8String "ø§³û¦© Ґѐô´ 

我做错了什么?

1 个答案:

答案 0 :(得分:0)

文档说CERT_RDN_UTF8_STRING表示值成员必须是“在网上编码为一,二或三,八位字符的16位Unicode字符UTF8数组。”但是charExtensionValue指向8位字符的数组。另外,您正在计算字符串,就好像它不是UTF-16字符串一样。 –斯图尔特