数据流的生成方法

文档序号:7721417阅读:241来源:国知局
专利名称:数据流的生成方法
技术领域
本发明涉及数据通讯领域,特别涉及一种数据流的生成方法,用于.NET Remoting通信。
背景技术
.NET Remoting是一禾中RPC(Remote Procedure Calls)远程过程调用的实现方式, 在不同应用程序域通信的技术,使用.NETRemoting可以在同一个进程中、一个系统的不同 进程之间或不同系统的进程之间进行通信。 但是在现有的技术中,当通信的双方通过APDU指令进行通信时,由于.NET Remoting数据包含了很多无用的数据,这样就大大的影响了数据的传输效率,并且也增加 了对数据进行解析的复杂度。

发明内容
本发明旨在提供一种数据流的生成方法,用于.NET Remoting通信,能够解决现有 技术中数据传输效率较低等问题。 为了实现上述目的,根据本发明的一个方面,提供了一种数据流的生成方法,其包
括对第一标识信息和第二标识信息分别进行运算,得到运算后的第一标识信息和运算后
的第二标识信息;对运算后的第一标识信息进行压縮,得到压縮后的第一标识信息;通过
压縮后的第一标识信息、运算后的第二标识信息与待发送的参数数据生成数据流。 本发明提供了一种精简的.NET Remoting数据流的生成方法,通过这种方法生成
数据流,可以在完成同样的功能下,大大压縮数据量,提高了数据的传输效率,同时降低了
数据解析的复杂度。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中
图1示出了根据本发明实施例的用于.NET Remoting通信的数据流的生成方法的 流程图; 图2示出了根据本发明实施例的用于.NET Remoting通信的数据流的生成方法的 详细流程图。
具体实施例方式
图1示出了根据本发明实施例的用于.NET Remoting通信的数据流的生成方法的 流程图。如图l所示,根据本发明实施例的用于.NET Remoting通信的数据流的生成方法 包括 S101,对第一标识信息和第二标识信息进行运算,得到运算后的第一标识信息和
4运算后的第二标识信息; S102,对运算后的第一标识信息进行压縮,得到压縮后的第一标识信息; S103,通过压縮后的第一标识信息、运算后的第二标识信息与待发送的参数数据
生成数据流。 具体的,首先,客户端主机获取组成基于精简的.NET Remoting数据通讯格式的数 据流所需要的标识信息的源数据。 其次,对所述源数据分别进行运算,得到运算后的数据并保存。 然后,对所述得到的运算后的数据进行压縮,将得到的压縮数据作为所述标识信
息的标识。 然后,获取要发送给智能卡的参数数据的参数列表,并对所述参数数据进行序列 化。 然后,将所述标识信息的标识和所述序列化后的参数数据组成基于精简的.NET Remoting数据通讯格式的数据流,并封装成APDU指令发送给智能卡。 在本发明实施例中,所述组成基于精简的.NET Remoting数据通讯格式的数据流 所需要的标识信息具体为命名空间、类名、方法名和服务名称。 相应地,所述获取组成基于精简的.NET Remoting数据通讯格式的数据流所需要
的标识信息的源数据具体为获取命名空间、类名、方法名和服务名称的源数据。 所述对源数据分别进行运算的方法具体为使用MD5哈希算法或SHA-1安全散列
算法或其他自定义的算法对命名空间、类名和方法名的源数据分别进行运算,得到运算后
的数据。 所述对得到的运算后的数据进行压縮,包括 1)对所述命名空间的运算值进行压縮的方法,具体为读取所述命名空间的运算 值的前三个字节,将这三个字节按照小端的方式排列,并在第一个字节的前面补一个O字 节,得到的四个字节为所述命名空间的标识; 2)对所述类名和方法名的运算值进行压縮的方法,具体为分别读取所述类名和 所述方法名的运算值的前两个字节,将类名的运算值的前两个字节按照小端的方式排列作 为类名的标识,以及将方法名的运算值的前两个字节按照小端的方式排列作为方法名的标 识。 在本发明中,对所述参数数据进行序列化的方法,具体为根据所述参数数据的类 型将所述参数数据进行存储。 所述将标识信息的标识和所述序列化后的参数数据组成基于精简的.NET Remoting数据通讯格式的数据流的方法具体为 将所述命名空间的标识、类名的标识、方法名的标识、服务名称的长度、服务名 称的ASCII码以及序列化后的参数数据顺序排列,得到的数据流即为基于精简的.NET Remoting数据通讯格式的数据流。 这里,还可以通过其他方式来排列上述所述命名空间的标识、类名的标识、方法名
的标识、服务名称的长度、服务名称的ASCII码以及序列化后的参数数据,以便生成所述数
据流,例如,通过预定的规则进行排列等等。 下面将参考附图2并结合实施例,来详细说明本发明。
本发明实施例通过重写.NET Remoting通信类来获取Remoting数据,Remoting源 数据是封装在Remoting执行时的Message参数里,我们通过这个参数的数据类型提供的 接口可以一一获取相应的源数据。 本实施例提供了一种用于.NET Remoting通信的数据流的生成方法,客户端主机 与智能卡采用本实施例组成的精简的.NETRemoting数据通讯格式进行通讯,可以大大地 提高数据的传输效率,并且降低了智能卡解析数据的复杂度,具体实现步骤如下
步骤S201 :客户端主机与智能卡通过读卡器建立连接。 步骤S202 :客户端主机获取组成精简的.NET Remoting数据通讯格式所需要的标 识信息命名空间的源数据。 在本实施例中,命名空间的源数据具体为 010000010111000001110000 ; 并且,本实施例中在获取命名空间的源数据的同时还要获取程序集 publickeytoken '26272048F12BFFAF,数据,二进制表示具体为 步骤S203 :对命名空间的源数据进行运算,得到运算后的数据并保存。
其中,对命名空间的源数据进行运算的运算方法有多种,如MD5 (Message-Digest Algorithm 5)哈希算法、SHA-1 (Secure HashAlgorithm)安全散列算法和其他自定义的算 法等,在本实施例中,对命名空间的源数据进行运算的运算方法具体为MD5哈希算法,即对 命名空间的源数据进行MD5运算,计算哈希值; 并且,在本实施例中对命名空间的源数据进行MD5运算时还需要结 合程序集publickeytoken '26272048F12BFFAF'数据,即将二进制的程序集 publickeytoken '26272048F12BFFAF'数据与命名空间的源数据用一个字符'.'进行链接, 其中,'.'的二进制表示为00101110,对链接后的数据进行MD5运算,得到的MD5值具体为 al 65 58 2b dl b0 53 eb d9 34 63 d4 90 ba c4 cf ;
上述连接符还可以为"_"、"_"、空格等,并不局限于"."。 步骤S204 :对步骤S203中得到的运算后的数据进行压縮,将压縮得到的内容作为 命名空间的标识并保存。 在本实施例步骤S204中,对得到的运算后的数据进行压縮的方法具体为 读取命名空间的MD5值的前三个字节,将这三个字节小端排列,并在第一个字节
的前面添加一个0字节,得到的四个字节为0058 65 al,这四个字节即为命名空间的标识。 步骤S205 :客户端主机获取组成精简的.NET Remoting数据通讯格式所需要的标
识信息类名的源数据。 类名的源数据具体为
101。 步骤S206 :对类名的源数据进行运算,得到运算后的数据并保存。
其中,对类名的源数据进行运算的运算方法有多种,如MD5 (Message-Digest Algorithm 5)哈希算法、SHA-1 (Secure HashAlgorithm)安全散列算法和其他自定义的算 法等,在本实施例步骤S206中,对类名的源数据进行运算的具体方法与步骤S203中对命名 空间的源数据进行运算的方法相同,都是MD5哈希算法; 并且,对类名的源数据进行MD5运算,得到的MD5值具体为a7 09 5f c2 df 20 e8 a6 ba 6b 80 92 84 bc 63 5f。 步骤S207 :对步骤S206中得到的运算后的数据进行压縮,将压縮得到的内容作为 类名的标识并保存。 在本实施例步骤S207中,对得到的运算后的数据进行压縮的具体方法为 读取类名的MD5值的前两个字节,将这两个字节小端排列,得到的两个字节为09
a7 ,这两个字节即为类名的标识。 步骤S208 :客户端主机获取组成精简的.NET Remoting数据通讯格式所需要的标
识信息方法名的源数据。 方法名的源数据具体为
10000110001。 步骤S209 :对方法名的源数据进行运算,得到运算后的数据并保存。 其中,对方法名的源数据进行运算的运算方法有多种,如MD5 (Message-Digest
Algorithm 5)哈希算法、SHA-1 (Secure HashAlgorithm)安全散列算法和其他自定义的算
法等,在本实施例步骤S209中,对方法名的源数据进行运算的具体方法与步骤S203中对命
名空间的源数据进行运算的方法相同,都是MD5哈希算法; 并且,对方法名的源数据进行MD5运算时需要结合该方法中的参数 System. Byte, System. Intl6, System. Int32, System. Int64, System. String禾口
System. 10. FileAccess, 因此进行MD5运算后得到的MD5值具体为9d d6 e9 7d 53 5a53 6a d4 23 b3 04 ad db fl 34。 步骤S210 :对步骤S209中得到的运算后的数据进行压縮,将压縮得到的内容作为 方法名的标识并保存。 在本实施例步骤S210中,对得到的运算后的数据进行压縮的方法具体为
读取方法名的MD5值的前两个字节,将这两个字节小端排列,得到的两个字节为 d6 9d,这两个字节即为方法名的标识。 步骤S211 :客户端主机获取组成精简的.NET Remoting数据通讯格式所需要的标
识信息服务名称的源数据。 服务名称的源数据具体为
10100101110011101010111001001101001。 步骤S212 :将服务名称的源数据转化成ASCII码的形式,再将ASCII码的形式的 服务名称的数据长度用2个字节表示。在本实施例中,ASCII码形式的服务名称具体为4d 79 53 65 7276 69 63 65 2e75 72 69, ASCII码形式的服务名称的数据长度为000d。 步骤S213 :获取要发送给智能卡的参数数据的参数列表,并按照指定的处理格式 对得到的参数列表中的参数数据进行序列化。 在本实施例中,按照指定的处理格式对参数数据进行序列化的操作,具体为 按照参数数据在参数列表中出现的顺序依次进行处理,即将byte, sbyte, bool类
型的数据用1个字节存储;将char, short, ushort类型的数据用2个字节存储;将int,
uint, float, e皿m类型的数据用4个字节存储;将long, ulong, double类型的数据用8个
字节存储;若是string类型的数据,则将数据的长度用2个字节表示,即存储的格式为2个
字节的数据长度+ASCIIi格式的数据内容;若是数组类型的数据,则数组中数据元素数量
用4个字节表示,即存储的格式为4个字节的数据元素数量+数据内容,其中数据内容的长
度为相应数据类型的元素占用的存储字节数乘以元素数量得到的长度。 步骤S214 :将命名空间的标识、类名的标识、方法名的标识、服务名称的长度、服
务名称的ASCII码以及序列化后的参数数据按照预定的规则进行排列,组成数据流,得到
的数据流即为按照精简的.NET Remoting数据通讯格式组成的数据流。 在本实施例步骤S214中,预定的规则可以是顺序排列,即将将命名空间的标识、
类名的标识、方法名的标识、服务名称的长度、服务名称的ASCII码以及序列化后的参数数
据顺序排列,组成数据流; 预定的规则还可以是自定义的,即将服务名称的长度、服务名称的ASCII码、命名
空间的标识、类名的标识、方法名的标识以及序列化后的参数数据顺序排列,组成数据流; 在本实施例所生成的数据流中,各种标识信息必须位于序列化后的参数数据的前
面,但是各种标识信息之间可以按不同的顺序排列,即,命名空间的标识、类名的标识、方法
名的标识与服务名称的长度和服务名称的ASCII码之间的排列顺序可以是任意的。 步骤S215 :判断组成的数据流的长度是否大于255个字节,若小于255个字节,则
执行步骤S216,若大于255个字节,则执行步骤S217。 步骤S216 :将步骤S214中得到的按照精简的.NET Remoting数据通讯格式组成 的数据流封装成一个APDU指令发送给智能卡。 在本实施例步骤S216中,发送给智能卡的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个字节6f 04 01 00 00 00 43 00 00 00 80 c2 00 00 ff为APDU指 令的固定字符,ff表示一个APDU指令发送的数据的长度最大为ff ,第16个字节d8为前导 符,第17和18个字节00 03为服务端口号,第19个字节6f为占位符,第20个字节到第23 个字节00 58 65 al为命名空间的标识,第24和25个字节09 a7为类名的标识,第26和 27个字节d6 9d为方法名的标识,第28和29个字节00 0d为服务名称的长度,第30个字 节到第42个字节4d 79 5365 72 76 69 63 65 2e 75 72 69为服务名称的MD5值,第43 个字节以后00 00 00 64......为参数数据。 步骤S217 :将步骤S214中得到的按照精简的.NET Remoting数据通讯格式组成 的数据流封装成多个APDU指令发送给智能卡。 在本实施例步骤S217中,根据步骤S214中组成的数据流的长度来决定将上述数据流封装成几个APDU指令发送给智能卡; 其中,发送给智能卡的第一条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个字节6f
04 01 00 00 00 43 00 00 00 80 c2 0000 ff为APDU指令的固定字符,ff表示一个APDU 指令发送的数据的长度最大为ff,第16个字节d8为前导符,第17和18个字节ff ff为 数据流的长度大于255个字节的标记,第19个字节到第22个字节00 00 03 26为参数数 据的总长度,第23个字节到第26个字节00 00 00 d9为本条APDU指令中传送给智能卡的 参数数据的长度,第27个字节d8为前导符,第28和29个字节00 03为服务端口号,第30 个字节6f为占位符,第31个字节到第34个字节0058 65 al为命名空间的标识,第35和 36个字节09 a7为类名的标识,第37和38个字节d6 9d为方法名的标识,第39和40个字 节OO 0d为服务名称的长度,第41个字节到第53个字节4d 79 53 65 72 76 6963 65 2e
75 72 69为服务名称的MD5值,第42个字节以后00 0001......为本条APDU指令要传送
的参数数据; 发送给智能卡的第二条APDU指令到最后一条APDU指令的格式均为一样的,APDU 指令中不需要再包含命名空间的标识、类名的标识、方法名的标识、服务名称的长度和服务 名称的MD5值,只需要传送参数数据即可。 具体地,在本实施例中,发送给智能卡的第二条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个字节6f 04 01 00 00 00 43 0000 00 80 c2 00 00 ff为APDU指令的固定字 符,ff表示一个APDU指令发送的数据的长度最大为ff ,第16个字节d8为前导符,第17和 18个字节ff ff为数据流的长度大于255个字节的标记,第19个字节到第22个字节00 00 00 09为已发送给智能卡的参数数据的长度,第23个字节到第26个字节00 00 00 f4为本
条APDU指令中要传送给智能卡的参数数据的长度,第27个字节以后00 00 lb......为本
条APDU指令中要传送给智能卡的参数数据。 本实施例只是本发明中提供的一个优选实施例,本实施例中,客户端主机获取标 识信息命令空间的源数据,进行运算和压縮,保存得到的数据,再获取标识信息类名的源数 据,进行运算和压縮,保存得到的数据,再获取标识信息方法名的源数据,进行运算和压縮, 保存得到的数据,再获取标识信息服务名称的源数据,进行运算并保存,然后获取参数数 据,对参数数据进行处理,并封装成APDU指令的格式发送给智能卡。 但是,在实际操作中,对标识信息中的命名空间、类名、方法名和服务名称,以及参 数数据的处理可以是没有顺序的,客户端主机可以同时获取标识信息命名空间、类名、方法 名和服务名称的源数据,再对获取的源数据分别进行处理,然后对参数数据进行处理;也 可以依次获取方法名、类名、服务名称和命名空间的源数据,再分别对获取的源数据进行处 理,然后对参数数据进行处理等。 本发明提供了一种用于.NET Remoting通信的数据流的生成方法,通过这种方法 生成数据流,可以在完成同样的功能下,大大压縮数据量,提高了数据的传输效率,同时降 低了数据解析的复杂度。 显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成 的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在 存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中 的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬 件和软件结合。 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种数据流的生成方法,其特征在于,包括对第一标识信息和第二标识信息分别进行运算,得到运算后的第一标识信息和运算后的第二标识信息;对所述运算后的第一标识信息进行压缩,得到压缩后的第一标识信息;通过所述压缩后的第一标识信息、所述运算后的第二标识信息与待发送的参数数据生成数据流。
2. 根据权利要求1所述的方法,其特征在于,通过所述压縮后的第一标识信息、所述运 算后的第二标识信息与待发送的参数数据生成数据流的步骤包括将所述压縮后的第一标识信息、所述运算后的第二标识信息与待发送的参数数据按照 预定的规则排列成所述数据流。
3. 根据权利要求2所述的方法,其特征在于,所述预定的规则包括所述压縮后的第一 标识信息以及所述运算后的第二标识信息排列在所述待发送的参数数据的前面。
4. 根据权利要求1所述的方法,其特征在于,对第一标识信息进行运算的步骤包括通过所述MD5哈希算法或SHA-1安全散列算法或其他自定义的算法对所述第一标识信 息的数据进行运算,得到运算后的第一标识信息。
5. 根据权利要求1所述的方法,其特征在于,对第二标识信息进行运算的步骤包括将第二标识信息的数据转化成ASCIII码; 使用两个字节表示所述第二标识信息的长度; 将所述两个字节和所述ASCII码作为所述运算后的第二标识信息。
6. 根据权利要求1至5中任一项所述的方法,其特征在于,所述第一标识信息包括以下至少之一 命名空间、类名和方法名,所述第二标识信息包括服务名称。
7. 根据权利要求6所述的方法,其特征在于,对运算后的命名空间进行压縮的步骤包括获取运算后的命名空间的值的前三个字节; 将所述三个字节按照小端的方式排列;在排列后的第一个字节前补充一个值为0的字节,并将所得到的四个字节作为压縮后 的命名空间。
8. 根据权利要求6所述的方法,其特征在于, 对运算后的类名进行压縮的步骤包括 获取运算后的类名的值的前两个字节;将所述两个字节按照小端的方式排列,并将排列后的两个字节作为压縮后的类名; 对运算后的方法名进行压縮的步骤包括 获取运算后的方法名的值的前两个字节;将所述两个字节按照小端的方式排列,并将排列后的两个字节作为压縮后的方法名。
9. 根据权利要求1所述的方法,其特征在于,在通过所述压縮后的第一标识信息、所述 运算后的第二标识信息与待发送的参数数据生成数据流之后,所述方法还包括判断所述数据流的长度是否大于阈值; 若是,则将所述数据流封装成多条指令发送给接收方; 否则,将所述数据流封装成一条指令发送给接收方。
10.根据权利要求1所述的方法,其特征在于,在通过所述压縮后的第一标识信息、所 述运算后的第二标识信息与待发送的参数数据生成数据流之前,所述方法还包括 对所述参数数据进行序列化。
全文摘要
本发明提供了一种数据流的生成方法,其包括对第一标识信息和第二标识信息分别进行运算,得到运算后的第一标识信息和运算后的第二标识信息;对运算后的第一标识信息进行压缩,得到压缩后的第一标识信息;通过压缩后的第一标识信息、运算后的第二标识信息与待发送的参数数据生成数据流。
文档编号H04L12/56GK101764811SQ20091024416
公开日2010年6月30日 申请日期2009年12月30日 优先权日2009年12月30日
发明者于华章, 陆舟 申请人:北京飞天诚信科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1