2013-04-22 28 views
-3

我們正在使用自定義智能卡,通過COM(通過USB)接口讀取和寫入數據。正在使用交易智能卡寫作的好主意?

每當我們添加或更新記錄時,需要在卡上進行一些管理以確保更新其他信息(主要是指針)。卡上的信息基本上是一個64k字節的數組。在單個添加或更新時,數據在字節數組中的各個點處被讀取和寫入。

我想強制執行一個方法來完成原子化的整個更新。如果我們處於寫入過程中,並且智能卡被拔出,數據很容易被破壞,尤其是因爲實際上它只是一個連續的字節數組,所以一個字節不合適會混淆整個數組的有效性。我想盡可能少地發生這種情況。

我查看了TransactionScope,但是這主要看起來是用於數據庫事務。像這樣的機制對我的問題有用嗎?或者我應該考慮其他方法來強制我的軟件塊以有效的方式讀取和寫入?

我們使用的智能卡是由政府機構提供給我們的,因此不會更改。它有一個內存芯片,就像你在你的SIM卡上看到的一樣,你的電話也有很多銀行卡(相對於磁條)。 該卡使用ISO-7816-15規格設計。卡和卡的接口最初是由另一個程序員設計的,他基本上對我說:我只處理進入的字節和字節,我不做任何驗證。這對我來說似乎很奇怪,因爲我認爲他的責任是不讓卡片變得如此容易損壞。顯然它是我的。

我會研究更多的技術規格,雖然這導致我走出了我的舒適區,除非我絕對需要,我不想惹他的代碼。也許這張卡有比目前做的更好的方法。

有一個簡單的READ命令,它只支持一次讀取231個連續的字節。當我問他爲什麼這麼做,爲什麼我不能一次性得到整個字節數組時,他說這就是所有的卡都支持的。所以閱讀整個文件真的很尷尬。它變得更糟,因爲一旦它「滿」,它應該跳到數組的開頭。 :S

+0

寫一個事務性文件系統(2階段提交)(如果設備SDK不具有一個)... – 2013-04-22 08:08:18

+0

爲什麼-4?我盡力解釋問題所在。 – Davio 2013-04-22 08:30:57

回答

0

您表示您使用的是基於文件的智能卡,如ISO 7816-15定義查找文件「目錄結構」和對象,如卡上的密鑰。智能卡是可以以某種方式編程的處理器卡(直到它們被熔合,並且只有當你有權訪問正確的鍵時)。

基於文件的卡片基於ISO 7816-4,如果您想用智能卡做任何事情,卡片應該是您庫存的一部分。在哪些文件應該是什麼樣的定義。聽起來就像你正在處理支持循環EF的卡,這是一種不太常見的基本文件(EF)結構。

在ISO 7816-4中,還有確定文件大小的方法。通常,使用由FID APDU指令從格式正確的SELECT FILE返回的FCI(文件控制信息)信息來返回此信息。要將所有數據作爲事務讀取,只需讀出所有信息並在返回指示和錯誤的ISO 7816-4狀態字或發生傳輸錯誤時返回某種異常。

現在寫數據有點麻煩,因爲你需要智能卡的支持來完成這樣的事情。許多卡支持這種功能,主要表現爲「卡撕裂」支持,因爲一旦卡突然從讀卡器中取出,所有的電源都會從處理器中丟失(!)。

您可以在一個方法內組合兩個上述(聚合APDU調用)來創建一個事務。無論如何,緩存內存中的所有數據應該很容易,我們在這裏並不是在談論千兆字節的數據。

+0

就你而言,你可能已經注意到你對智能卡的瞭解並不足以處理它們,甚至不足以與你的同事進行有意義的交流。我會非常建議你購買一些關於這個主題的書。 – 2013-04-25 21:13:40

+0

那麼,很想看一些書,但時間壓力是一個問題在這裏。很多軟件都是由「專家」製作的,但他只處理路上的字節和字節,甚至不進行任何形式的驗證,因此完全取決於我。我只是希望能更好地理解他的角色,因爲他不再爲這個項目工作。 – Davio 2013-04-26 13:48:48

+0

嗯,沒關係,只要你以某種方式向公司表明他們在專業方面沒有真正的表現。在繼續之前,必須在某處理解/記錄事務支持。也許他們可以在這種情況下與之前的開發人員取得聯繫。但這不是我想的直接問題。 – 2013-04-26 14:16:53

0

如果你有一個真正的智能卡(相對於存儲卡,但我不能從「自定義智能卡」中得到),尋址它的內存爲一個字節數組是非常異常工作分裂在主機應用程序(一切)和智能卡應用程序之間(幾乎沒有)。 這也使得智能卡變得更加困難,因爲文件校驗和是一種標準機制,但是如果您必須將64kByte數組集成到校驗和中,這可能需要很長時間。跨越多個語句的事務是不尋常的,但是可能的(比較ISO 7816第7部分,它也在卡SQL附近,也就是CSQL);您的卡是否支持非CSQL序列,必須在文檔中查找。

我的建議是:

  • 儘量多用卡功能,在單卡命令儘可能覆蓋不同的,但連接的信息。 (這也有助於在需要時細粒度訪問條件)。

  • 查看手冊並可能使用另一家制造商提供的支持多種對賬單交易的卡。

+0

感謝您的回答,我將把我的答案納入我原來的問題。 – Davio 2013-04-23 07:02:41