2013-01-24 63 views
0

我目前正在嘗試編碼IDTech加密PINpad /讀卡器(HIDUSB設備)的支持。一旦進入(或者刷或鍵控)時,設備發送XML格式的響應,其看起來如下:從加密PINpad解析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字符串來完成該操作?

+0

你用什麼編碼來獲得這個渲染?機會是一個小硬件設備將使用ASCII –

+0

你的意思是Base-64? – GalacticCowboy

+0

@StenPetrov - 製造商可下載的「演示」實用軟件生成此渲染。有趣的是,如果我將其實用程序配置爲鍵盤楔形,則加密的數據將以十分清晰的十六進制顯示。 –

回答

0

您可以通過查找非法字符並用字符代碼替換它們來預處理該字符串(& #xxxx)。我會擔心加密的blob有一天會收到一封密切的報價。如果這是一種可能性,我沒有看到編寫自己的解析器的方法。

另一種方法是根本不把它看作XML,只是把它看作大多數固定文本和一些插入的變量部分。所以要麼運行一個正則表達式,要麼這些字段的長度是固定的,你甚至可以只做SubString調用。如果格式改變,這顯然更容易中斷。

+0

感謝您的建議。不幸的是,我不能假定數據是固定長度的。從供應商處獲悉後,很明顯,我需要做的是解析初始字節數組,以刪除並存儲加密的信息,然後在其餘數據上使用XML解析器來獲取剩餘的數據。 –