專利名稱:數(shù)據(jù)流的生成方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)通訊領(lǐng)域,特別涉及一種數(shù)據(jù)流的生成方法,用于.NET Remoting通信。
背景技術(shù):
.NET Remoting是一禾中RPC(Remote Procedure Calls)遠(yuǎn)程過程調(diào)用的實(shí)現(xiàn)方式, 在不同應(yīng)用程序域通信的技術(shù),使用.NETRemoting可以在同一個(gè)進(jìn)程中、一個(gè)系統(tǒng)的不同 進(jìn)程之間或不同系統(tǒng)的進(jìn)程之間進(jìn)行通信。 但是在現(xiàn)有的技術(shù)中,當(dāng)通信的雙方通過APDU指令進(jìn)行通信時(shí),由于.NET Remoting數(shù)據(jù)包含了很多無用的數(shù)據(jù),這樣就大大的影響了數(shù)據(jù)的傳輸效率,并且也增加 了對(duì)數(shù)據(jù)進(jìn)行解析的復(fù)雜度。
發(fā)明內(nèi)容
本發(fā)明旨在提供一種數(shù)據(jù)流的生成方法,用于.NET Remoting通信,能夠解決現(xiàn)有 技術(shù)中數(shù)據(jù)傳輸效率較低等問題。 為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)流的生成方法,其包
括對(duì)第一標(biāo)識(shí)信息和第二標(biāo)識(shí)信息分別進(jìn)行運(yùn)算,得到運(yùn)算后的第一標(biāo)識(shí)信息和運(yùn)算后
的第二標(biāo)識(shí)信息;對(duì)運(yùn)算后的第一標(biāo)識(shí)信息進(jìn)行壓縮,得到壓縮后的第一標(biāo)識(shí)信息;通過
壓縮后的第一標(biāo)識(shí)信息、運(yùn)算后的第二標(biāo)識(shí)信息與待發(fā)送的參數(shù)數(shù)據(jù)生成數(shù)據(jù)流。 本發(fā)明提供了一種精簡的.NET Remoting數(shù)據(jù)流的生成方法,通過這種方法生成
數(shù)據(jù)流,可以在完成同樣的功能下,大大壓縮數(shù)據(jù)量,提高了數(shù)據(jù)的傳輸效率,同時(shí)降低了
數(shù)據(jù)解析的復(fù)雜度。
此處所說明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā) 明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中
圖1示出了根據(jù)本發(fā)明實(shí)施例的用于.NET Remoting通信的數(shù)據(jù)流的生成方法的 流程圖; 圖2示出了根據(jù)本發(fā)明實(shí)施例的用于.NET Remoting通信的數(shù)據(jù)流的生成方法的 詳細(xì)流程圖。
具體實(shí)施例方式
圖1示出了根據(jù)本發(fā)明實(shí)施例的用于.NET Remoting通信的數(shù)據(jù)流的生成方法的 流程圖。如圖l所示,根據(jù)本發(fā)明實(shí)施例的用于.NET Remoting通信的數(shù)據(jù)流的生成方法 包括 S101,對(duì)第一標(biāo)識(shí)信息和第二標(biāo)識(shí)信息進(jìn)行運(yùn)算,得到運(yùn)算后的第一標(biāo)識(shí)信息和
4運(yùn)算后的第二標(biāo)識(shí)信息; S102,對(duì)運(yùn)算后的第一標(biāo)識(shí)信息進(jìn)行壓縮,得到壓縮后的第一標(biāo)識(shí)信息; S103,通過壓縮后的第一標(biāo)識(shí)信息、運(yùn)算后的第二標(biāo)識(shí)信息與待發(fā)送的參數(shù)數(shù)據(jù)
生成數(shù)據(jù)流。 具體的,首先,客戶端主機(jī)獲取組成基于精簡的.NET Remoting數(shù)據(jù)通訊格式的數(shù) 據(jù)流所需要的標(biāo)識(shí)信息的源數(shù)據(jù)。 其次,對(duì)所述源數(shù)據(jù)分別進(jìn)行運(yùn)算,得到運(yùn)算后的數(shù)據(jù)并保存。 然后,對(duì)所述得到的運(yùn)算后的數(shù)據(jù)進(jìn)行壓縮,將得到的壓縮數(shù)據(jù)作為所述標(biāo)識(shí)信
息的標(biāo)識(shí)。 然后,獲取要發(fā)送給智能卡的參數(shù)數(shù)據(jù)的參數(shù)列表,并對(duì)所述參數(shù)數(shù)據(jù)進(jìn)行序列 化。 然后,將所述標(biāo)識(shí)信息的標(biāo)識(shí)和所述序列化后的參數(shù)數(shù)據(jù)組成基于精簡的.NET Remoting數(shù)據(jù)通訊格式的數(shù)據(jù)流,并封裝成APDU指令發(fā)送給智能卡。 在本發(fā)明實(shí)施例中,所述組成基于精簡的.NET Remoting數(shù)據(jù)通訊格式的數(shù)據(jù)流 所需要的標(biāo)識(shí)信息具體為命名空間、類名、方法名和服務(wù)名稱。 相應(yīng)地,所述獲取組成基于精簡的.NET Remoting數(shù)據(jù)通訊格式的數(shù)據(jù)流所需要
的標(biāo)識(shí)信息的源數(shù)據(jù)具體為獲取命名空間、類名、方法名和服務(wù)名稱的源數(shù)據(jù)。 所述對(duì)源數(shù)據(jù)分別進(jìn)行運(yùn)算的方法具體為使用MD5哈希算法或SHA-1安全散列
算法或其他自定義的算法對(duì)命名空間、類名和方法名的源數(shù)據(jù)分別進(jìn)行運(yùn)算,得到運(yùn)算后
的數(shù)據(jù)。 所述對(duì)得到的運(yùn)算后的數(shù)據(jù)進(jìn)行壓縮,包括 1)對(duì)所述命名空間的運(yùn)算值進(jìn)行壓縮的方法,具體為讀取所述命名空間的運(yùn)算 值的前三個(gè)字節(jié),將這三個(gè)字節(jié)按照小端的方式排列,并在第一個(gè)字節(jié)的前面補(bǔ)一個(gè)O字 節(jié),得到的四個(gè)字節(jié)為所述命名空間的標(biāo)識(shí); 2)對(duì)所述類名和方法名的運(yùn)算值進(jìn)行壓縮的方法,具體為分別讀取所述類名和 所述方法名的運(yùn)算值的前兩個(gè)字節(jié),將類名的運(yùn)算值的前兩個(gè)字節(jié)按照小端的方式排列作 為類名的標(biāo)識(shí),以及將方法名的運(yùn)算值的前兩個(gè)字節(jié)按照小端的方式排列作為方法名的標(biāo) 識(shí)。 在本發(fā)明中,對(duì)所述參數(shù)數(shù)據(jù)進(jìn)行序列化的方法,具體為根據(jù)所述參數(shù)數(shù)據(jù)的類 型將所述參數(shù)數(shù)據(jù)進(jìn)行存儲(chǔ)。 所述將標(biāo)識(shí)信息的標(biāo)識(shí)和所述序列化后的參數(shù)數(shù)據(jù)組成基于精簡的.NET Remoting數(shù)據(jù)通訊格式的數(shù)據(jù)流的方法具體為 將所述命名空間的標(biāo)識(shí)、類名的標(biāo)識(shí)、方法名的標(biāo)識(shí)、服務(wù)名稱的長度、服務(wù)名 稱的ASCII碼以及序列化后的參數(shù)數(shù)據(jù)順序排列,得到的數(shù)據(jù)流即為基于精簡的.NET Remoting數(shù)據(jù)通訊格式的數(shù)據(jù)流。 這里,還可以通過其他方式來排列上述所述命名空間的標(biāo)識(shí)、類名的標(biāo)識(shí)、方法名
的標(biāo)識(shí)、服務(wù)名稱的長度、服務(wù)名稱的ASCII碼以及序列化后的參數(shù)數(shù)據(jù),以便生成所述數(shù)
據(jù)流,例如,通過預(yù)定的規(guī)則進(jìn)行排列等等。 下面將參考附圖2并結(jié)合實(shí)施例,來詳細(xì)說明本發(fā)明。
本發(fā)明實(shí)施例通過重寫.NET Remoting通信類來獲取Remoting數(shù)據(jù),Remoting源 數(shù)據(jù)是封裝在Remoting執(zhí)行時(shí)的Message參數(shù)里,我們通過這個(gè)參數(shù)的數(shù)據(jù)類型提供的 接口可以一一獲取相應(yīng)的源數(shù)據(jù)。 本實(shí)施例提供了一種用于.NET Remoting通信的數(shù)據(jù)流的生成方法,客戶端主機(jī) 與智能卡采用本實(shí)施例組成的精簡的.NETRemoting數(shù)據(jù)通訊格式進(jìn)行通訊,可以大大地 提高數(shù)據(jù)的傳輸效率,并且降低了智能卡解析數(shù)據(jù)的復(fù)雜度,具體實(shí)現(xiàn)步驟如下
步驟S201 :客戶端主機(jī)與智能卡通過讀卡器建立連接。 步驟S202 :客戶端主機(jī)獲取組成精簡的.NET Remoting數(shù)據(jù)通訊格式所需要的標(biāo) 識(shí)信息命名空間的源數(shù)據(jù)。 在本實(shí)施例中,命名空間的源數(shù)據(jù)具體為 010000010111000001110000 ; 并且,本實(shí)施例中在獲取命名空間的源數(shù)據(jù)的同時(shí)還要獲取程序集 publickeytoken '26272048F12BFFAF,數(shù)據(jù),二進(jìn)制表示具體為 步驟S203 :對(duì)命名空間的源數(shù)據(jù)進(jìn)行運(yùn)算,得到運(yùn)算后的數(shù)據(jù)并保存。
其中,對(duì)命名空間的源數(shù)據(jù)進(jìn)行運(yùn)算的運(yùn)算方法有多種,如MD5 (Message-Digest Algorithm 5)哈希算法、SHA-1 (Secure HashAlgorithm)安全散列算法和其他自定義的算 法等,在本實(shí)施例中,對(duì)命名空間的源數(shù)據(jù)進(jìn)行運(yùn)算的運(yùn)算方法具體為MD5哈希算法,即對(duì) 命名空間的源數(shù)據(jù)進(jìn)行MD5運(yùn)算,計(jì)算哈希值; 并且,在本實(shí)施例中對(duì)命名空間的源數(shù)據(jù)進(jìn)行MD5運(yùn)算時(shí)還需要結(jié) 合程序集publickeytoken '26272048F12BFFAF'數(shù)據(jù),即將二進(jìn)制的程序集 publickeytoken '26272048F12BFFAF'數(shù)據(jù)與命名空間的源數(shù)據(jù)用一個(gè)字符'.'進(jìn)行鏈接, 其中,'.'的二進(jìn)制表示為00101110,對(duì)鏈接后的數(shù)據(jù)進(jìn)行MD5運(yùn)算,得到的MD5值具體為 al 65 58 2b dl b0 53 eb d9 34 63 d4 90 ba c4 cf ;
上述連接符還可以為"_"、"_"、空格等,并不局限于"."。 步驟S204 :對(duì)步驟S203中得到的運(yùn)算后的數(shù)據(jù)進(jìn)行壓縮,將壓縮得到的內(nèi)容作為 命名空間的標(biāo)識(shí)并保存。 在本實(shí)施例步驟S204中,對(duì)得到的運(yùn)算后的數(shù)據(jù)進(jìn)行壓縮的方法具體為 讀取命名空間的MD5值的前三個(gè)字節(jié),將這三個(gè)字節(jié)小端排列,并在第一個(gè)字節(jié)
的前面添加一個(gè)0字節(jié),得到的四個(gè)字節(jié)為0058 65 al,這四個(gè)字節(jié)即為命名空間的標(biāo)識(shí)。 步驟S205 :客戶端主機(jī)獲取組成精簡的.NET Remoting數(shù)據(jù)通訊格式所需要的標(biāo)
識(shí)信息類名的源數(shù)據(jù)。 類名的源數(shù)據(jù)具體為
101。 步驟S206 :對(duì)類名的源數(shù)據(jù)進(jìn)行運(yùn)算,得到運(yùn)算后的數(shù)據(jù)并保存。
其中,對(duì)類名的源數(shù)據(jù)進(jìn)行運(yùn)算的運(yùn)算方法有多種,如MD5 (Message-Digest Algorithm 5)哈希算法、SHA-1 (Secure HashAlgorithm)安全散列算法和其他自定義的算 法等,在本實(shí)施例步驟S206中,對(duì)類名的源數(shù)據(jù)進(jìn)行運(yùn)算的具體方法與步驟S203中對(duì)命名 空間的源數(shù)據(jù)進(jìn)行運(yùn)算的方法相同,都是MD5哈希算法; 并且,對(duì)類名的源數(shù)據(jù)進(jìn)行MD5運(yùn)算,得到的MD5值具體為a7 09 5f c2 df 20 e8 a6 ba 6b 80 92 84 bc 63 5f。 步驟S207 :對(duì)步驟S206中得到的運(yùn)算后的數(shù)據(jù)進(jìn)行壓縮,將壓縮得到的內(nèi)容作為 類名的標(biāo)識(shí)并保存。 在本實(shí)施例步驟S207中,對(duì)得到的運(yùn)算后的數(shù)據(jù)進(jìn)行壓縮的具體方法為 讀取類名的MD5值的前兩個(gè)字節(jié),將這兩個(gè)字節(jié)小端排列,得到的兩個(gè)字節(jié)為09
a7 ,這兩個(gè)字節(jié)即為類名的標(biāo)識(shí)。 步驟S208 :客戶端主機(jī)獲取組成精簡的.NET Remoting數(shù)據(jù)通訊格式所需要的標(biāo)
識(shí)信息方法名的源數(shù)據(jù)。 方法名的源數(shù)據(jù)具體為
10000110001。 步驟S209 :對(duì)方法名的源數(shù)據(jù)進(jìn)行運(yùn)算,得到運(yùn)算后的數(shù)據(jù)并保存。 其中,對(duì)方法名的源數(shù)據(jù)進(jìn)行運(yùn)算的運(yùn)算方法有多種,如MD5 (Message-Digest
Algorithm 5)哈希算法、SHA-1 (Secure HashAlgorithm)安全散列算法和其他自定義的算
法等,在本實(shí)施例步驟S209中,對(duì)方法名的源數(shù)據(jù)進(jìn)行運(yùn)算的具體方法與步驟S203中對(duì)命
名空間的源數(shù)據(jù)進(jìn)行運(yùn)算的方法相同,都是MD5哈希算法; 并且,對(duì)方法名的源數(shù)據(jù)進(jìn)行MD5運(yùn)算時(shí)需要結(jié)合該方法中的參數(shù) System. Byte, System. Intl6, System. Int32, System. Int64, System. String禾口
System. 10. FileAccess, 因此進(jìn)行MD5運(yùn)算后得到的MD5值具體為9d d6 e9 7d 53 5a53 6a d4 23 b3 04 ad db fl 34。 步驟S210 :對(duì)步驟S209中得到的運(yùn)算后的數(shù)據(jù)進(jìn)行壓縮,將壓縮得到的內(nèi)容作為 方法名的標(biāo)識(shí)并保存。 在本實(shí)施例步驟S210中,對(duì)得到的運(yùn)算后的數(shù)據(jù)進(jìn)行壓縮的方法具體為
讀取方法名的MD5值的前兩個(gè)字節(jié),將這兩個(gè)字節(jié)小端排列,得到的兩個(gè)字節(jié)為 d6 9d,這兩個(gè)字節(jié)即為方法名的標(biāo)識(shí)。 步驟S211 :客戶端主機(jī)獲取組成精簡的.NET Remoting數(shù)據(jù)通訊格式所需要的標(biāo)
識(shí)信息服務(wù)名稱的源數(shù)據(jù)。 服務(wù)名稱的源數(shù)據(jù)具體為
10100101110011101010111001001101001。 步驟S212 :將服務(wù)名稱的源數(shù)據(jù)轉(zhuǎn)化成ASCII碼的形式,再將ASCII碼的形式的 服務(wù)名稱的數(shù)據(jù)長度用2個(gè)字節(jié)表示。在本實(shí)施例中,ASCII碼形式的服務(wù)名稱具體為4d 79 53 65 7276 69 63 65 2e75 72 69, ASCII碼形式的服務(wù)名稱的數(shù)據(jù)長度為000d。 步驟S213 :獲取要發(fā)送給智能卡的參數(shù)數(shù)據(jù)的參數(shù)列表,并按照指定的處理格式 對(duì)得到的參數(shù)列表中的參數(shù)數(shù)據(jù)進(jìn)行序列化。 在本實(shí)施例中,按照指定的處理格式對(duì)參數(shù)數(shù)據(jù)進(jìn)行序列化的操作,具體為 按照參數(shù)數(shù)據(jù)在參數(shù)列表中出現(xiàn)的順序依次進(jìn)行處理,即將byte, sbyte, bool類
型的數(shù)據(jù)用1個(gè)字節(jié)存儲(chǔ);將char, short, ushort類型的數(shù)據(jù)用2個(gè)字節(jié)存儲(chǔ);將int,
uint, float, e皿m類型的數(shù)據(jù)用4個(gè)字節(jié)存儲(chǔ);將long, ulong, double類型的數(shù)據(jù)用8個(gè)
字節(jié)存儲(chǔ);若是string類型的數(shù)據(jù),則將數(shù)據(jù)的長度用2個(gè)字節(jié)表示,即存儲(chǔ)的格式為2個(gè)
字節(jié)的數(shù)據(jù)長度+ASCIIi格式的數(shù)據(jù)內(nèi)容;若是數(shù)組類型的數(shù)據(jù),則數(shù)組中數(shù)據(jù)元素?cái)?shù)量
用4個(gè)字節(jié)表示,即存儲(chǔ)的格式為4個(gè)字節(jié)的數(shù)據(jù)元素?cái)?shù)量+數(shù)據(jù)內(nèi)容,其中數(shù)據(jù)內(nèi)容的長
度為相應(yīng)數(shù)據(jù)類型的元素占用的存儲(chǔ)字節(jié)數(shù)乘以元素?cái)?shù)量得到的長度。 步驟S214 :將命名空間的標(biāo)識(shí)、類名的標(biāo)識(shí)、方法名的標(biāo)識(shí)、服務(wù)名稱的長度、服
務(wù)名稱的ASCII碼以及序列化后的參數(shù)數(shù)據(jù)按照預(yù)定的規(guī)則進(jìn)行排列,組成數(shù)據(jù)流,得到
的數(shù)據(jù)流即為按照精簡的.NET Remoting數(shù)據(jù)通訊格式組成的數(shù)據(jù)流。 在本實(shí)施例步驟S214中,預(yù)定的規(guī)則可以是順序排列,即將將命名空間的標(biāo)識(shí)、
類名的標(biāo)識(shí)、方法名的標(biāo)識(shí)、服務(wù)名稱的長度、服務(wù)名稱的ASCII碼以及序列化后的參數(shù)數(shù)
據(jù)順序排列,組成數(shù)據(jù)流; 預(yù)定的規(guī)則還可以是自定義的,即將服務(wù)名稱的長度、服務(wù)名稱的ASCII碼、命名
空間的標(biāo)識(shí)、類名的標(biāo)識(shí)、方法名的標(biāo)識(shí)以及序列化后的參數(shù)數(shù)據(jù)順序排列,組成數(shù)據(jù)流; 在本實(shí)施例所生成的數(shù)據(jù)流中,各種標(biāo)識(shí)信息必須位于序列化后的參數(shù)數(shù)據(jù)的前
面,但是各種標(biāo)識(shí)信息之間可以按不同的順序排列,即,命名空間的標(biāo)識(shí)、類名的標(biāo)識(shí)、方法
名的標(biāo)識(shí)與服務(wù)名稱的長度和服務(wù)名稱的ASCII碼之間的排列順序可以是任意的。 步驟S215 :判斷組成的數(shù)據(jù)流的長度是否大于255個(gè)字節(jié),若小于255個(gè)字節(jié),則
執(zhí)行步驟S216,若大于255個(gè)字節(jié),則執(zhí)行步驟S217。 步驟S216 :將步驟S214中得到的按照精簡的.NET Remoting數(shù)據(jù)通訊格式組成 的數(shù)據(jù)流封裝成一個(gè)APDU指令發(fā)送給智能卡。 在本實(shí)施例步驟S216中,發(fā)送給智能卡的APDU指令具體為6f 04 01 00 00 00 43 00 00 00 80 c2 00 00 ff d8 00 03 6f 00 58 65 a109 a7 d6 9d 00 0d 4d 79 53 65 72 76 69 63 65 2e 75 72 69 00 00 0064......。 其中前15個(gè)字節(jié)6f 04 01 00 00 00 43 00 00 00 80 c2 00 00 ff為APDU指 令的固定字符,ff表示一個(gè)APDU指令發(fā)送的數(shù)據(jù)的長度最大為ff ,第16個(gè)字節(jié)d8為前導(dǎo) 符,第17和18個(gè)字節(jié)00 03為服務(wù)端口號(hào),第19個(gè)字節(jié)6f為占位符,第20個(gè)字節(jié)到第23 個(gè)字節(jié)00 58 65 al為命名空間的標(biāo)識(shí),第24和25個(gè)字節(jié)09 a7為類名的標(biāo)識(shí),第26和 27個(gè)字節(jié)d6 9d為方法名的標(biāo)識(shí),第28和29個(gè)字節(jié)00 0d為服務(wù)名稱的長度,第30個(gè)字 節(jié)到第42個(gè)字節(jié)4d 79 5365 72 76 69 63 65 2e 75 72 69為服務(wù)名稱的MD5值,第43 個(gè)字節(jié)以后00 00 00 64......為參數(shù)數(shù)據(jù)。 步驟S217 :將步驟S214中得到的按照精簡的.NET Remoting數(shù)據(jù)通訊格式組成 的數(shù)據(jù)流封裝成多個(gè)APDU指令發(fā)送給智能卡。 在本實(shí)施例步驟S217中,根據(jù)步驟S214中組成的數(shù)據(jù)流的長度來決定將上述數(shù)據(jù)流封裝成幾個(gè)APDU指令發(fā)送給智能卡; 其中,發(fā)送給智能卡的第一條APDU指令具體為6f 04 01 00 0000 41 00 00 00 80 c2 00 00 ff d8 ff ff 00 00 03 26 00 00 00 d9 d8 00 036f 00 58 65 al 09 a7 a4
6f 00 0d 4d 79 53 65 72 76 69 63 65 2e 75 7269 00 00 01......,前15個(gè)字節(jié)6f
04 01 00 00 00 43 00 00 00 80 c2 0000 ff為APDU指令的固定字符,ff表示一個(gè)APDU 指令發(fā)送的數(shù)據(jù)的長度最大為ff,第16個(gè)字節(jié)d8為前導(dǎo)符,第17和18個(gè)字節(jié)ff ff為 數(shù)據(jù)流的長度大于255個(gè)字節(jié)的標(biāo)記,第19個(gè)字節(jié)到第22個(gè)字節(jié)00 00 03 26為參數(shù)數(shù) 據(jù)的總長度,第23個(gè)字節(jié)到第26個(gè)字節(jié)00 00 00 d9為本條APDU指令中傳送給智能卡的 參數(shù)數(shù)據(jù)的長度,第27個(gè)字節(jié)d8為前導(dǎo)符,第28和29個(gè)字節(jié)00 03為服務(wù)端口號(hào),第30 個(gè)字節(jié)6f為占位符,第31個(gè)字節(jié)到第34個(gè)字節(jié)0058 65 al為命名空間的標(biāo)識(shí),第35和 36個(gè)字節(jié)09 a7為類名的標(biāo)識(shí),第37和38個(gè)字節(jié)d6 9d為方法名的標(biāo)識(shí),第39和40個(gè)字 節(jié)OO 0d為服務(wù)名稱的長度,第41個(gè)字節(jié)到第53個(gè)字節(jié)4d 79 53 65 72 76 6963 65 2e
75 72 69為服務(wù)名稱的MD5值,第42個(gè)字節(jié)以后00 0001......為本條APDU指令要傳送
的參數(shù)數(shù)據(jù); 發(fā)送給智能卡的第二條APDU指令到最后一條APDU指令的格式均為一樣的,APDU 指令中不需要再包含命名空間的標(biāo)識(shí)、類名的標(biāo)識(shí)、方法名的標(biāo)識(shí)、服務(wù)名稱的長度和服務(wù) 名稱的MD5值,只需要傳送參數(shù)數(shù)據(jù)即可。 具體地,在本實(shí)施例中,發(fā)送給智能卡的第二條APDU指令具體為6f 04 01 00 00
00 42 00 00 00 80 c2 00 00 ff d8 ff ff 00 00 00 d900 00 00 f4 00 00 lb......,
其中前15個(gè)字節(jié)6f 04 01 00 00 00 43 0000 00 80 c2 00 00 ff為APDU指令的固定字 符,ff表示一個(gè)APDU指令發(fā)送的數(shù)據(jù)的長度最大為ff ,第16個(gè)字節(jié)d8為前導(dǎo)符,第17和 18個(gè)字節(jié)ff ff為數(shù)據(jù)流的長度大于255個(gè)字節(jié)的標(biāo)記,第19個(gè)字節(jié)到第22個(gè)字節(jié)00 00 00 09為已發(fā)送給智能卡的參數(shù)數(shù)據(jù)的長度,第23個(gè)字節(jié)到第26個(gè)字節(jié)00 00 00 f4為本
條APDU指令中要傳送給智能卡的參數(shù)數(shù)據(jù)的長度,第27個(gè)字節(jié)以后00 00 lb......為本
條APDU指令中要傳送給智能卡的參數(shù)數(shù)據(jù)。 本實(shí)施例只是本發(fā)明中提供的一個(gè)優(yōu)選實(shí)施例,本實(shí)施例中,客戶端主機(jī)獲取標(biāo) 識(shí)信息命令空間的源數(shù)據(jù),進(jìn)行運(yùn)算和壓縮,保存得到的數(shù)據(jù),再獲取標(biāo)識(shí)信息類名的源數(shù) 據(jù),進(jìn)行運(yùn)算和壓縮,保存得到的數(shù)據(jù),再獲取標(biāo)識(shí)信息方法名的源數(shù)據(jù),進(jìn)行運(yùn)算和壓縮, 保存得到的數(shù)據(jù),再獲取標(biāo)識(shí)信息服務(wù)名稱的源數(shù)據(jù),進(jìn)行運(yùn)算并保存,然后獲取參數(shù)數(shù) 據(jù),對(duì)參數(shù)數(shù)據(jù)進(jìn)行處理,并封裝成APDU指令的格式發(fā)送給智能卡。 但是,在實(shí)際操作中,對(duì)標(biāo)識(shí)信息中的命名空間、類名、方法名和服務(wù)名稱,以及參 數(shù)數(shù)據(jù)的處理可以是沒有順序的,客戶端主機(jī)可以同時(shí)獲取標(biāo)識(shí)信息命名空間、類名、方法 名和服務(wù)名稱的源數(shù)據(jù),再對(duì)獲取的源數(shù)據(jù)分別進(jìn)行處理,然后對(duì)參數(shù)數(shù)據(jù)進(jìn)行處理;也 可以依次獲取方法名、類名、服務(wù)名稱和命名空間的源數(shù)據(jù),再分別對(duì)獲取的源數(shù)據(jù)進(jìn)行處 理,然后對(duì)參數(shù)數(shù)據(jù)進(jìn)行處理等。 本發(fā)明提供了一種用于.NET Remoting通信的數(shù)據(jù)流的生成方法,通過這種方法 生成數(shù)據(jù)流,可以在完成同樣的功能下,大大壓縮數(shù)據(jù)量,提高了數(shù)據(jù)的傳輸效率,同時(shí)降 低了數(shù)據(jù)解析的復(fù)雜度。 顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成 的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來實(shí)現(xiàn),從而可以將它們存儲(chǔ)在 存儲(chǔ)裝置中由計(jì)算裝置來執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中 的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬 件和軟件結(jié)合。 以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技 術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修 改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
一種數(shù)據(jù)流的生成方法,其特征在于,包括對(duì)第一標(biāo)識(shí)信息和第二標(biāo)識(shí)信息分別進(jìn)行運(yùn)算,得到運(yùn)算后的第一標(biāo)識(shí)信息和運(yùn)算后的第二標(biāo)識(shí)信息;對(duì)所述運(yùn)算后的第一標(biāo)識(shí)信息進(jìn)行壓縮,得到壓縮后的第一標(biāo)識(shí)信息;通過所述壓縮后的第一標(biāo)識(shí)信息、所述運(yùn)算后的第二標(biāo)識(shí)信息與待發(fā)送的參數(shù)數(shù)據(jù)生成數(shù)據(jù)流。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,通過所述壓縮后的第一標(biāo)識(shí)信息、所述運(yùn) 算后的第二標(biāo)識(shí)信息與待發(fā)送的參數(shù)數(shù)據(jù)生成數(shù)據(jù)流的步驟包括將所述壓縮后的第一標(biāo)識(shí)信息、所述運(yùn)算后的第二標(biāo)識(shí)信息與待發(fā)送的參數(shù)數(shù)據(jù)按照 預(yù)定的規(guī)則排列成所述數(shù)據(jù)流。
3. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述預(yù)定的規(guī)則包括所述壓縮后的第一 標(biāo)識(shí)信息以及所述運(yùn)算后的第二標(biāo)識(shí)信息排列在所述待發(fā)送的參數(shù)數(shù)據(jù)的前面。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,對(duì)第一標(biāo)識(shí)信息進(jìn)行運(yùn)算的步驟包括通過所述MD5哈希算法或SHA-1安全散列算法或其他自定義的算法對(duì)所述第一標(biāo)識(shí)信 息的數(shù)據(jù)進(jìn)行運(yùn)算,得到運(yùn)算后的第一標(biāo)識(shí)信息。
5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,對(duì)第二標(biāo)識(shí)信息進(jìn)行運(yùn)算的步驟包括將第二標(biāo)識(shí)信息的數(shù)據(jù)轉(zhuǎn)化成ASCIII碼; 使用兩個(gè)字節(jié)表示所述第二標(biāo)識(shí)信息的長度; 將所述兩個(gè)字節(jié)和所述ASCII碼作為所述運(yùn)算后的第二標(biāo)識(shí)信息。
6. 根據(jù)權(quán)利要求1至5中任一項(xiàng)所述的方法,其特征在于,所述第一標(biāo)識(shí)信息包括以下至少之一 命名空間、類名和方法名,所述第二標(biāo)識(shí)信息包括服務(wù)名稱。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,對(duì)運(yùn)算后的命名空間進(jìn)行壓縮的步驟包括獲取運(yùn)算后的命名空間的值的前三個(gè)字節(jié); 將所述三個(gè)字節(jié)按照小端的方式排列;在排列后的第一個(gè)字節(jié)前補(bǔ)充一個(gè)值為0的字節(jié),并將所得到的四個(gè)字節(jié)作為壓縮后 的命名空間。
8. 根據(jù)權(quán)利要求6所述的方法,其特征在于, 對(duì)運(yùn)算后的類名進(jìn)行壓縮的步驟包括 獲取運(yùn)算后的類名的值的前兩個(gè)字節(jié);將所述兩個(gè)字節(jié)按照小端的方式排列,并將排列后的兩個(gè)字節(jié)作為壓縮后的類名; 對(duì)運(yùn)算后的方法名進(jìn)行壓縮的步驟包括 獲取運(yùn)算后的方法名的值的前兩個(gè)字節(jié);將所述兩個(gè)字節(jié)按照小端的方式排列,并將排列后的兩個(gè)字節(jié)作為壓縮后的方法名。
9. 根據(jù)權(quán)利要求1所述的方法,其特征在于,在通過所述壓縮后的第一標(biāo)識(shí)信息、所述 運(yùn)算后的第二標(biāo)識(shí)信息與待發(fā)送的參數(shù)數(shù)據(jù)生成數(shù)據(jù)流之后,所述方法還包括判斷所述數(shù)據(jù)流的長度是否大于閾值; 若是,則將所述數(shù)據(jù)流封裝成多條指令發(fā)送給接收方; 否則,將所述數(shù)據(jù)流封裝成一條指令發(fā)送給接收方。
10.根據(jù)權(quán)利要求1所述的方法,其特征在于,在通過所述壓縮后的第一標(biāo)識(shí)信息、所 述運(yùn)算后的第二標(biāo)識(shí)信息與待發(fā)送的參數(shù)數(shù)據(jù)生成數(shù)據(jù)流之前,所述方法還包括 對(duì)所述參數(shù)數(shù)據(jù)進(jìn)行序列化。
全文摘要
本發(fā)明提供了一種數(shù)據(jù)流的生成方法,其包括對(duì)第一標(biāo)識(shí)信息和第二標(biāo)識(shí)信息分別進(jìn)行運(yùn)算,得到運(yùn)算后的第一標(biāo)識(shí)信息和運(yùn)算后的第二標(biāo)識(shí)信息;對(duì)運(yùn)算后的第一標(biāo)識(shí)信息進(jìn)行壓縮,得到壓縮后的第一標(biāo)識(shí)信息;通過壓縮后的第一標(biāo)識(shí)信息、運(yùn)算后的第二標(biāo)識(shí)信息與待發(fā)送的參數(shù)數(shù)據(jù)生成數(shù)據(jù)流。
文檔編號(hào)H04L12/56GK101764811SQ20091024416
公開日2010年6月30日 申請(qǐng)日期2009年12月30日 優(yōu)先權(quán)日2009年12月30日
發(fā)明者于華章, 陸舟 申請(qǐng)人:北京飛天誠信科技有限公司