【发布时间】:2019-06-05 16:06:40
【问题描述】:
使用CertNameToStr 函数可以获得证书的主题字符串:
C=US, S=California, L=San Jose, O="Adobe Systems, Incorporated", OU=Digital ID Class 3 - Microsoft Software Validation v2, OU=Acrobat Engineering, CN="Adobe Systems, Incorporated"
我的问题是,如何解析它以获取名称-值对数组?
我尝试使用带有, 字符作为分隔符的SplitString() 函数:
StrArr := SplitString(edtSubjectStr.Text, ',');
for I := Low(StrArr) to High(StrArr) do
Memo1.Lines.Append(Trim(StrArr[i]));
但结果不尽人意:
C=美国
S=加利福尼亚
L=圣何塞
O="Adobe 系统
合并"
OU=Digital ID Class 3 - Microsoft 软件验证 v2
OU=Acrobat 工程
CN="Adobe 系统
合并”
是否有任何 API 函数可以解析此主题字符串?
或者也许有一种方法可以用其他一些 Delphi 组件|类|函数来解析它?
【问题讨论】:
-
SplitString()不考虑带引号的字符串。您是否尝试过TStringList的CommaText属性?否则,您将只需要编写自己的解析器,或找到第 3 方解析器。这是一种相当简单的手动解析文本格式 -
据我所知
TStringList.CommaText将空格和逗号都视为分隔符。我一直在考虑手动编写解析器,但决定询问是否有任何标准方式 -
@ZurabD 使用
TStringsList.StrictDelimiter属性来避免CommaText分隔空格 -
只是古玩,你是如何使用crypto api的?您使用某些开源库还是第三方集?
-
@NasreddineGalfout 我使用
JEDI API Library & Security Code Library只是为了有API 声明sourceforge.net/projects/jedi-apilib 查看库中的JwaWinCrypt.pas模块。