Microsoft の CertStrToName() メソッドは、RFC 4514 に準拠していません。#-encodings を AttributeValue-encodings として扱う代わりに、それらを OctetStrings にエンコードされる値として扱います。これは、CertStrToName メソッドからすべての識別名を生成できるわけではないことを意味します。特に、独自の識別名を生成することはできません。
識別名の文字列表現は、RFC 4514: String Representation of Distinguished Names のものです。
ここで、属性タイプがドット付き 10 進形式の場合、実際には属性値を としてエンコードし、#
その後に ASN.1 AttributeValue の 16 進数で BER エンコードを行う必要があることがわかります。すなわち:
2.5.4.3=姓名、1.2.300.38.22=#12083132333435363738
次のCertStrToName()のドキュメントを読むこともできます。
番号記号 (#) で始まる値は、ASCII 16 進数として扱われ、CERT_RDN_OCTET_STRING に変換されます。埋め込まれた空白は無視されます。たとえば、1.2.3 = # AB CD 01 は 1.2.3=#ABCD01 と同じです。