0

我目前正在尝试编写对 IDTech 加密密码键盘/读卡器(HIDUSB 设备)的支持。在进入(刷卡或键控)后,设备会以 XML 格式发送响应,如下所示:

<DvcMsg Ver="1.1"><Dvc App="SecureKey Demo Software" AppVer="1.0" DvcType="M130-IDTECH" DvcSN="54114600381" Entry="SWIPE"></Dvc><Card CEncode="0" ETrk1="ýÚ‹çMŒ·¯×Õ³a+.7ãN2†ÖcƒTWïX¿6`Eåq1Bk_–Ø‚ÑM€œœåê`S" ETrk2="ÓÙ|•QΊkÄn`å ¤óhîõRÐ3ÌЀ{Rs¤Ì7MX¯nw" CDataKSN="P&ƒµ" Exp="0512" MskPAN="4444******4444" CHolder="PAYMENTECH" EFormat="4"></Card><Addr></Addr><Tran TranType="CREDIT"></Tran></DvcMsg>

我意识到 ETrk1、ETrk2 和 CDataKSN 属性中的加密信息包含无效字符,这些字符会阻止任何 XML 解析器。是否有一种方法可以使用不同的字符编码来生成每个字符的十六进制等效项,以便可以解析 XML,或者我是否需要首先操作 XML 字符串来完成此操作?

4

1 回答 1

0

您可以通过查找非法字符并将其替换为字符代码 (&#xxxx) 来预处理字符串。不过,有一天我会担心加密的 blob 包含一个密切的引用。如果这是一种可能性,我看不到编写自己的解析器的方法。

另一种方法是根本不将其视为 XML,而只是将其视为带有一些插入变量部分的大部分固定文本。所以要么运行一个正则表达式,或者如果字段是固定长度的,你甚至可以只做 SubString 调用。如果格式发生变化,这显然更容易中断。

于 2013-01-25T01:48:22.643 回答