《一种ASN1编码的快速读码方法.pdf》由会员分享,可在线阅读,更多相关《一种ASN1编码的快速读码方法.pdf(8页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN102332018A43申请公布日20120125CN102332018ACN102332018A21申请号201110279914222申请日20110921G06F17/3020060171申请人西安理工大学地址710048陕西省西安市金花南路5号72发明人王林杨祎74专利代理机构西安弘理专利事务所61214代理人张瑞琪54发明名称一种ASN1编码的快速读码方法57摘要本发明公开一种ASN1编码的快速读码方法,首先按照ASN1编码规则读取编码的标识符八位位组,判读该八位位组是否为空闲字段,若不为空闲字段,则按照ASN1编码规则读取该编码信息的长度八位位组,再根据得到的字节。
2、长度信息,读取相应字节长度的编码信息后,返回并读取下一条编码信息。否则,预设空闲字段字节长度的初始值为一固定值,最终确定空闲字段的实际长度,再从上一条编码信息的最后一个字节开始跳过相应长度的字节,再返回读取下一条编码信息。本发明解决了现有读码过程中需要依次判断字节是否为空闲字段的方法,能快速确定空闲字段的实际长度,大大提高了读码速度。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书1页说明书4页附图2页CN102332031A1/1页21一种ASN1编码的快速读码方法,其特征在于,包括以下步骤步骤1、按照ASN1编码规则读取编码的标识符八位位组,并判读该八位位组是否为空。
3、闲字段,若不为空闲字段,则进入步骤2,否则,进入步骤3;步骤2、按照ASN1编码规则读取该编码信息的长度八位位组,以得到该编码信息的字节长度信息,再根据得到的字节长度信息,读取相应字节长度的编码信息后,返回步骤1并读取下一条编码信息;步骤3、预设空闲字段字节长度D的初始值为一固定值L,读取该条编码信息的前L个字节并判断读取的字节是否全部为空闲字段;若读取的字节不全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/Q,再读取该编码信息的前L/Q个字节并判断读取的字节是否全部为空闲字段;若读取的字节不全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/2Q,读取该编码信息的前L/2Q个。
4、字节并判断读取的字节是否全部为空闲字段;依次类推,预设空闲字段字节长度D的取值的调整规律为依次呈倍数递减,直至读取的字节全部为空闲字段,此时预设空闲字段字节长度D取值L/NQ,进入步骤4,其中,L、Q和N均为正整数,且L为Q的倍数,N1,2,3;步骤4、读取该条编码信息的前L/NQD个字节并判断读取的字节是否全部为空闲字段;若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/NQ2D,读取该条编码信息的前L/NQ2D个字节并判断读取的字节是否全部为空闲字段;若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/NQ3D,读取该条编码信息的前L/NQ3D个字节并。
5、判断读取的字节是否全部为空闲字段;依次类推,预设空闲字段字节长度D取值的调整规律为依次等差增加,直至读取的字节不全部为空闲字段,此时预设空闲字段字节长度D取值L/NQMD,进入步骤5,其中,M和D均为正整数,M1,2,3;步骤5、读取该条编码信息的前L/NQM1D1个字节并判断读取的字节是否全部为空闲字段,若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/NQM1D2,读取该条编码信息的前L/NQM1D2个字节并判断读取的字节是否全部为空闲字段,若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/NQM1D3,依次类推,预设空闲字段字节长度D取值的调整规律。
6、为依次增加,直至读取的字节不全部为空闲字段,此时预设空闲字段字节长度D取值为L/NQM1DZ,此时,确定实际空闲字段字节长度为L/NQM1DZ1;其中,Z为正整数,Z1,2,3;步骤6、根据步骤5得到的实际空闲字段字节长度的数值,从上一条编码信息的最后一个字节开始跳过L/NQM1DZ1个字节的空闲字段,再返回至步骤1读取下一条编码信息。2按照权利要求1所述的ASN1编码的快速读码方法,其特征在于,步骤3中,Q取值为2。权利要求书CN102332018ACN102332031A1/4页3一种ASN1编码的快速读码方法技术领域0001本发明属于计算机编码数据处理技术领域,具体涉及一种ASN1编码的。
7、快速读码方法。背景技术0002ASN1ABSTRACTSYNTAXNOTATIONONE编码是定义抽象数据类型规格形式的标准,是用于描述数据的表示、编码、传输、解码的灵活的记法。它提供了一套正式、无歧义和精确的规则以描述独立于特定计算机硬件的对象结构。ASN1编码是通信协议中描述数据传输的正式标记,它与语言实现和物理表示无关,与应用的复杂度无关,尤其适合表示现代通信应用中那些复杂的、变化的和可扩展的数据结构。ASN1编码的每条编码信息之间相互独立,解码时互不影响,因此在两条编码信息中间插入若干字节完全相同的数据如FF或00,这些数据不包含任何信息且不会影响对信息的正确解码,通常称之为空闲字段。。
8、在程序进行解码读码时,如何快速的跳过空闲字段,继续对后续编码信息进行读码和解码,是非常重要的。0003目前处理方法是在读码过程中,对每个字节进行逐个判断以确定是否是空闲字段,实际判断次数等于空闲字段的字节数,因此当两个编码信息之间的空闲字段较长时,读码效率非常低下。因此通过一种快速、可靠的读码方法能快速确定编码信息之间空闲字段的长度,使读码效率不会因空闲字段字节长度变化而受到明显影响,在ASN1解码中显得尤为重要。发明内容0004本发明的目的是提供一种ASN1编码的快速读码方法,解决了现有读码过程中需要逐个判断字节是否为空闲字段的方法,能快速确定空闲字段的实际长度,大大提高了读码速度。0005。
9、本发明所采用的技术方案是,一种ASN1编码的快速读码方法,其特征在于,包括以下步骤0006步骤1、按照ASN1编码规则读取编码的标识符八位位组,并判读该八位位组是否为空闲字段,若不为空闲字段,则进入步骤2,否则,进入步骤3;0007步骤2、按照ASN1编码规则读取该编码信息的长度八位位组,以得到该编码信息的字节长度信息,再根据得到的字节长度信息,读取相应字节长度的编码信息后,返回步骤1并读取下一条编码信息;0008步骤3、预设空闲字段字节长度D的初始值为一固定值L,读取该条编码信息的前L个字节并判断读取的字节是否全部为空闲字段;若读取的字节不全部为空闲字段,则将预设空闲字段字节长度D的取值调整。
10、为L/Q,再读取该编码信息的前L/Q个字节并判断读取的字节是否全部为空闲字段;若读取的字节不全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/2Q,读取该编码信息的前L/2Q个字节并判断读取的字节是否全部为空闲说明书CN102332018ACN102332031A2/4页4字段;依次类推,预设空闲字段字节长度D的取值的调整规律为依次呈倍数递减,直至读取的字节全部为空闲字段,此时预设空闲字段字节长度D取值L/NQ,进入步骤4,其中,L、Q和N均为正整数,且L为Q的倍数,N1,2,3;0009步骤4、读取该条编码信息的前L/NQD个字节并判断读取的字节是否全部为空闲字段;若读取的字节全部为。
11、空闲字段,则将预设空闲字段字节长度D的取值调整为L/NQ2D,读取该条编码信息的前L/NQ2D个字节并判断读取的字节是否全部为空闲字段;若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/NQ3D,读取该条编码信息的前L/NQ3D个字节并判断读取的字节是否全部为空闲字段;依次类推,预设空闲字段字节长度D取值的调整规律为依次等差增加,直至读取的字节不全部为空闲字段,此时预设空闲字段字节长度D取值L/NQMD,进入步骤5,其中,M和D均为正整数,M1,2,3;0010步骤5、读取该条编码信息的前L/NQM1D1个字节并判断读取的字节是否全部为空闲字段,若读取的字节全部为空闲字段,。
12、则将预设空闲字段字节长度D的取值调整为L/NQM1D2,读取该条编码信息的前L/NQM1D2个字节并判断读取的字节是否全部为空闲字段,若读取的字节全部为空闲字段,则将预设空闲字段字节长度D的取值调整为L/NQM1D3,依次类推,预设空闲字段字节长度D取值的调整规律为依次增加,直至读取的字节不全部为空闲字段,此时预设空闲字段字节长度D取值为L/NQM1DZ,此时,确定实际空闲字段字节长度为L/NQM1DZ1;其中,Z为正整数,Z1,2,3;0011步骤6、根据步骤5得到的实际空闲字段字节长度的数值,从上一条编码信息的最后一个字节开始跳过L/NQM1DZ1个字节的空闲字段,再返回至步骤1读取下一条。
13、编码信息。0012步骤3中,Q取值为2。0013本发明方法首先预设ASN1编码中相邻两条编码信息之间的空闲字段字节长度,再根据读入字节是否为空闲字段,通过依次呈倍数递减和依次等差增加两种规则调整空闲字段字节长度,通过较少的读取判断次数最终确定实际的空闲字段字节长度,所需的判断次数与现有逐个字节判断次数相比大大减少,在空闲字段字节长度大时效果更加明显。因此,本发明方法简单,结果可靠,能很大程度提高ASN1编码的读码和解码速度。附图说明0014图1是利用本发明方法进行读码L1024且D16的字节判断次数示意图;0015图2是利用本发明方法进行读码L512且D16的字节判断次数示意图;0016图3是。
14、利用本发明方法进行读码L1024且D8的字节判断次数示意图。具体实施方式0017下面结合附图和具体实施方式对本发明进行详细说明。0018ASN1编码信息的一个字节为一个八位位组,且第一个字节为标示符八位位组,第二个字节为标示该编码信息字节长度信息的长度八位位组。本发明方法首先按照ASN1编码规则读取编码的标识符八位位组,并判读该八位位组是否全部为0或F,若不全部为0或F,则判断不是空闲字段而是编码信息,则进入步骤2,进入步骤2后,按照ASN1编码规则读说明书CN102332018ACN102332031A3/4页5取该编码信息的长度八位位组,得到该编码信息的字节长度信息,再根据得到的字节长度信。
15、息,读取相应字节长度的编码信息后,返回步骤1并读取下一条编码信息。如果该标识符八位位组全部为0或F,则判断为空闲字段,进入步骤3,在步骤3中预设空闲字段字节长度D的初始值为一固定值,经过步骤3、步骤4和步骤5的数值调整,最终确定两条编码信息之间的实际空闲字段字节长度,在步骤6中,上一条编码信息的最后一个字节开始跳过相应长度的字节,再返回至步骤1读取下一条编码信息。0019实施例0020本实施例中空闲字段实际长度为546个字节,L1024,D16时,ASN1编码的快速读码方法为0021步骤1、按照ASN1编码规则读取编码的标识符八位位组,并判读该八位位组是否为空闲字段,若不为空闲字段,则进入步骤。
16、2,否则,进入步骤3;0022步骤2、按照ASN1编码规则读取该编码信息的长度八位位组,以得到该编码信息的字节长度信息,再根据得到的字节长度信息,读取相应字节长度的编码信息后,返回步骤1并读取下一条编码信息;0023步骤3、预设空闲字段字节长度D为一固定值L,L1024,读取该条编码信息的前1024个字节并判断读取的字节是否全部为空闲字段;由于读取的字节不全部为空闲字段,将预设空闲字段字节长度D的取值调整为L/Q,Q2,L/Q1024/2512,再读取该编码信息的前512个字节并判断读取的字节是否全部为空闲字段;由于该512个字节全部为空闲字段,此时D取值为512,此时,N2,进入步骤4;00。
17、24步骤4、读取该条编码信息的前L/NQD个字节并判断读取的字节是否全部为空闲字段,D16,L/NQD51216528;若读取的字节全部为空闲字段,则将D取值调整为L/NQ2D52816544,读取该条编码信息的前544个字节并判断读取的字节是否全部为空闲字段;由于该读取的544个字节全部为空闲字段,则将D取值调整为L/NQ3D560,读取该条编码信息的前560个字节并判断读取的字节是否全部为空闲字段,由于读取的该560个字节不全部为空闲字段,此时D取值为560,进入步骤5,其中,M3;0025步骤5、读取该条编码信息的前L/NQM1D1560161545个字节并判断读取的字节是否全部为空闲字。
18、段,由于读取的字节全部为空闲字段,则将D取值调整为546,读取该条编码信息的前546个字节并判断读取的字节是否全部为空闲字段,由于读取的字节全部为空闲字段,则将D取值调整为547,由于读取的字节不全部为空闲字段,此时D取值为547,最后确定实际空闲字段字节长度为L/NQM1DZ1546,此时,Z3;0026步骤6、根据步骤5得到的实际空闲字段字节长度为546,从上一条编码信息的最后一个字节开始跳过546个字节的空闲字段,再返回至步骤1读取下一条编码信息。0027如图1至图3所示,为利用本发明方法进行ASN1编码的快速读码方法进行的实验结果示意图,图中横坐标为实际的空闲字段字节长度,纵坐标为读码。
19、过程中需要读入字节继而判断是否为空闲字段的次数,其中,图1中,取L1024且D16,图2中取L512且D16,图3中取L1024且D8。0028由图1和图2对比可得,当D一定时,L越小,对于空闲字段字节长度大的编码字节判断次数越多,对于空闲字段字节长度小的编码字节判断次数越少。因此,为了减少判断次数以实现本方法的快捷性,当空闲字段的长度普遍较小时,应将L取值相对较小;反之,说明书CN102332018ACN102332031A4/4页6当空闲字段的长度普遍较大时,应将L取值相对较大。由图1和图3对比可得,在实际空闲字段字节长度稍大于预设空闲字段字节长度的初始取值L时,D取值越小,需要判断的次数越多,因此,当编码中多个空闲字段的长度较为集中时,可将D取值相对较小,反之应将D取值相对较大。说明书CN102332018ACN102332031A1/2页7图1图2说明书附图CN102332018ACN102332031A2/2页8图3说明书附图CN102332018A。