快速特征码扫描的制作方法
【专利摘要】在字符串字段上扫描特征码的方法和系统。在一个实施例中,本发明提供了一种特征码扫描方法。所述方法包括把一个或多个特征码处理成一个或多个格式,所述格式包括每个定长特征码或特征子码的一个或多个指纹和一个或多个后续查找数据结构,从而使得每个定长特征码或特征子码的指纹的数目等于特征码扫描操作的步长,并且使得所述特定定长特征码或特征子码在任何被扫描的字符串字段中的任何位置上都能被识别,接收特定字符串字段,识别所述特定字符串字段所包括的任何特征码,包括在每个以扫描步长为间距的位置上扫描所述指纹,和在有一个或多个匹配的指纹的位置上查找所述后续查找数据结构,和输出任何已识别的特征码。
【专利说明】快速特征码扫描
【技术领域】
[0001 ] 本发明涉及扫描字符串字段中的特征码。
【背景技术】
[0002]数字内容的物件(如文件,程序,网页,电子邮件,互联网数据包,或数字图像)可以包含一个或多个字符串字段。一个字符串字段是一个通常代表文字或可执行代码的数据值串。例如,一个互联网数据包可以包含网址,主机名,超文本传输协定(HTTP)报头,超文本传输协定报文,电子邮件附件,电子邮件标题和电子邮件内容。一个字符串字段的大小可从几个字节到数百万以上个字节。一个字符串特征码可以是一串特定的完全指明的数据值或是特定的数据值的表达式(如特定的正则表达式),其目的是用来识别一个字符串物件(如特定的计算机病毒或特定的基因序列)。特征码可以被存储在一个征码数据库中。一个字征码数据库可以包含多个特征码。一个字符串特征码的大小可从几个字节到几千个字节。
[0003]字符串特征码和字符串字段都是包含很多基本单元的比特字符串。一个基本单元是最小的有语义的单位,因此通常在特征码扫描技术中作为扫描单元。一个基本单元的大小由应用而定。例如,英文字符串的基本单位通常是8比特位(即一个字节),而一个电脑病毒特征码的基本单位通常是一个字节或半个字节。
[0004]每一个特征码的基本单元可以被指定为等于或不等于某个特定值,或在某个特定范围内(如在数字范围O至9内或英文字母范围a至z内)。每个基本单元可以为不区分大小写或区分大小写。每个基本单元可以支持简单的逻辑运算(如“非”)。此外,每个特征码可以包括通配符,例如,(一个不定长通配符)或“?”(一个定长通配符),其中表示零个或任意多个任意基本单元和“? ”表示一个任意基本单元。对于每一个不定长特征码符号,可进一步指明其任意长度范围。当一个特征码包括不定长字符,特征码的长度不定。如果一个特征码不包括不定长字符,其长度是固定的。
[0005]一个典型的特征码扫描过程可包括在一字符串字段内的所有可能的位置上,比较所述字符串字段和特征码数据库中所对应的特征码。扫描速度通常被特征码的大小和复杂性限制。此外,扫描速度还受特征码逐个更新的能力限制。
【发明内容】
[0006]本发明实施例提供了在字符串字段上扫描特征码的方法和系统。一般来说,本发明一个方面的实施例提供了字符串特征码扫描方法,所述方法包括把一个或多个特征码处理成一个或多个格式,所述格式包括每个定长特征码或不定长特征码的每个定长特征子码的一个或多个指纹和一个或多个后续查找数据结构,所述一个或多个指纹包括特定定长特征码或特征子码的第J个指纹,所述第J个指纹的第一基本单元在所述特定定长特征码或特征子码中的在扫描方向上的位置除以特征码扫描操作的步长的余数等于J,从而使得所述指纹的数目等于特征码扫描的步长,并且使得所述特定定长特征码或特征子码在任何被扫描的字符串字段中的任何位置上都能被识别,其中每个所述指纹包括特定定长特征码或特征子码的一个或多个片段,所述一个或多个片段具有在所述特定定长特征码或特征子码中的任何地方的特定位置,接收一个由数据值组成的特定字符串字段,识别所述特定字符串字段所包括的任何特征码,包括在每个以扫描步长为间距的位置上,扫描所述特定字符串字段,以查找一个或多个特征码的一个或多个所述指纹,和在有一个或多个匹配的所述指纹的位置上,查找所述特定字符串字段,以查找一个或多个后续查找数据结构,和输出所述特定字符串字段中的任何已识别的特征码。本发明的所述方面的其它实施例包括所述方法所对应的系统,装置,和计算机软件产品。
[0007]这些和其它实施例可选地包括一个或多个以下特性。每个定长特征码或特征子码有多个指纹,和所述扫描包括在每个以扫描步长为间距的位置上,扫描所述字符串字段,以查找一个或多个特征码的多个指纹,包括并行查找两个或两个以上指纹。特定特征码的一个或多个指纹中的每个指纹在原空间或在被投影到一个或多个影子空间之后是完全指明的,所述影子空间是比所述原空间格式更广的空间,所述影子空间通过引入一些模糊性到所述原空间,从而使得一个在特定影子空间的指纹影子对应于一个或多个在所述原空间的指纹。
[0008]所述字符串特征码扫描方法可进一步包括在每个以扫描步长为间距的位置上,在原空间扫描所述特定字符串字段,以查找一个或多个指纹,和先在每个以扫描步长为间距的位置上,在一个或多个指纹的一个或多个影子空间中的每个影子空间中,扫描所述特定字符串字段,以查找一个或多个指纹,然后再在一个或多个所述影子空间中的至少一个影子空间中有一个或多个已识别的指纹的位置上,在所述原空间中核实已识别的指纹中的一个或两个。引入一些模糊性到所述原空间进一步包括把原空间的大写和小写字母变成一个大小写相同的字母,把原空间的所有从O至9的数字变成一个相同的数字,和把原空间的空格和变成空格或中的一个或多个。
[0009]扫描以查找所述一个或多个特征码的所述一个或多个指纹可进一步包括使用一个或多个散列表和一个或多个布隆(Bloom)过滤器中的一个或多个进行扫描。扫描以查找所述一个或多个特征码的所述一个或多个指纹可进一步包括使用一个散列值解复用器和一个指纹长度解复用器中的一个或多个进行扫描。多个特征码的不同指纹长度的数目可比所述多个特征码的不同特征码长度的数目少,且所述扫描可进一步包括在每个以扫描步长为间距的位置上,扫描所述特定字符串字段,以查找所述多个特征码的多个指纹,包括并行查找两个或两个以上长度相同的指纹。所述一个或多个指纹可被选择,从而使得所述指纹的长度被限制为一组覆盖在一个或多个长度范围内的一个或多个长度的长度,以提供多分辨率的指纹扫描。每个所述指纹的长度可是特征码扫描操作的步长的整倍数。所述字符串特征码扫描方法可进一步包括使用一个或多个内容寻址存储器(CAM)和一个或多个有限自动机(FA)中的一个或多个进行扫描,以查找所述一个或多个特征码的所述一个或多个指纹。
[0010]所述字符串特征码扫描方法可进一步包括把多个特征码的多个指纹的每个指纹分解为一个或多个指纹段,从而使得所述特征码的不同指纹段长度的数目比所述特征码的不同指纹长度的数目少,在每个以扫描步长为间距的位置上,扫描所述特定字符串字段,以查找所述多个指纹段,包括并行查找两个或两个以上指纹段,和把已识别的指纹段合成为任何指纹匹配。所有指纹段可具有一个相同的长度,且所述扫描所述特定字符串字段以查找多个指纹段可用一个是所述指纹段长度的整倍数的特征码扫描操作的步长。一个说明特定指纹段在任何指纹内的一个或多个可能位置的指纹段位图可和所述特定指纹段储存在一起,以用于把已识别的指纹段合成为任何指纹匹配。说明一个或多个可能长度的指纹长度信息可和每个指纹的第一段或每一段储存在一起,以用于把已识别的指纹段合成为任何指纹匹配。一个或多个有限自动机(FA)可用来把已识别的指纹段合成为任何指纹匹配。
[0011]所述字符串特征码扫描方法可进一步包括存储每个指纹的假阳性匹配的概率,在有一个或多个匹配的指纹的位置上,检查所对应的假阳性匹配的概率,和当所述一个或多个假阳性匹配的概率中的一个假阳性匹配的概率不足够低时,查找所述特定字符串字段,以查找所述一个或多个后续查找数据结构。所述方法可进一步包括用一个指纹所对应的多个定长特征码或特征子码的一个或多个不同的基本单元构建一个差分查找数据结构,和查找所述特定字符串字段,以查找所述一个或多个后续查找数据结构,包括差分查找一个已识别的指纹所对应的多个定长特征码或特征子码。所述方法可进一步包括把每一个定长特征码或特征子码用一个或多个码膜比特编码,所述一个或多个码膜比特包括用于说明一个或多个以下匹配条件的一个或多个码膜比特:不用匹配,是否区分大小写,逻辑非,预定义范围,逻辑运算,和任意范围,所述一个或多个码膜比特包括一个或多个以下码膜比特:一个或多个基本单元或亚基本单元的码膜比特,一个或多个特征子码段的码膜比特,和一个或多个定长特征码或特征子码的码膜比特,查找所述特定字符串字段,以查找所述一个或多个后续查找数据结构,包括以查找所述被码膜比特编码的定长特征码或特征子码。所述方法可进一步包括把所述特定字符串字段规格化,包括把已编码的特定字符串字段解码,把已压缩的特定字符串字段解压,和把不需要的字符串数据删除中的一个或多个过程。
[0012]一般来说,本发明的一个方面的实施例提供字符串特征码扫描方法,所述方法包括把多个特征码中的每个特征码分解成一个或多个特征码段,接收一个由数据值组成的特定字符串字段,扫描所述特定字符串字段,以查找所述多个特征码的所述多个特征码段,包括并行查找两个或两个以上特征码段,把已识别的特征码段合成为任何特征码的匹配,和输出所述特定字符串字段中的任何已识别的特征码。本发明的所述方面的其它实施例包括所述方法所对应的系统,装置,和计算机软件产品。
[0013]具体实施可包括一个或多个以下特性。扫描以查找所述多个特征码段可进一步包括使用:一个或多个散列表,一个或多个布隆过滤器,一个或多个有散列值复用或长度复用或两者的散列表,和一个或多个有散列值复用或长度复用或两者的布隆过滤器中的一个或多个进行扫描。一个说明特定特征码段在任何特征码内的一个或多个可能位置的特征码段位图可以和所述特定特征码段存储在一起,以用来把已识别的特征码段合成为任何特征码匹配。说明一个或多个可能的特征码长度的特征码长度信息可进一步和每个特征码的第一段或每一段储存在一起,以用于把已识别的特征码段合成为任何特征码匹配。一个或多个有限自动机(FA)可被用来把已识别的特征码段合成为任何特征码匹配。
[0014]一般来说,本发明的一个方面的实施例提供字符串特征码扫描方法,所述方法包括把一个或多个特征码处理成一个或多个格式,包括把一个或多个特征码中的每个不定长特征码分解为多个定长特征子码和一个或多个不定长特征子码,接收一个由数据值组成的特定字符串字段,识别所述特定字符串字段所包括的任何特征码,包括扫描所述特定字符串字段,以查找多个所述定长特征码或特征子码,和在有一个或多个所述定长特征子码被识别的位置上,把已识别的所述定长特征子码合成为任何不定长特征码,和输出所述特定字符串字段中的任何已识别的特征码。处理一个或多个特征码成一个或多个格式可进一步包括储存每个定长特征子码的位置信息到静态特征码合成规则数据库,所述位置信息包括一个秩序和一个到下一定长特征子码的距离范围,和包括或不包括对每对定长特征子码之间的不定长特征子码的描述,和所述把已识别的定长特征子码合成为任何不定长特征码的匹配进一步包括检查每个已识别的定长特征子码的位置信息和核实或不核实每对相邻定长特征子码之间的所述不定长特征子码,和更新一个动态特征码合成状态表。一个或多个有限自动机(FA)可以被用来把已识别的定长特征子合成为任何不定长特征码。本发明的所述方面的其它实施例包括所述方法所对应的系统,装置,和计算机软件产品。
[0015]—般来说,本发明的一个方面的实施例提供字符串特征码扫描方法,所述方法包括为一个或多个字符串物件中的每个字符串物件选择多个定长特征码,所述特定字符串物件的多个定长特征码包括第J个定长特征码,所述第J个定长特征码的第一基本单元在所述特定字符串物件中的在扫描方向上的位置除以特征码扫描操作的步长的余数等于J,从而使得所述特定字符串物件的定长特征码的数目等于特征码扫描操作的步长,并且使得所述特定字符串物件在任何被扫描的字符串字段中的任何位置上都能被识别,接收一个由数据值组成的特定字符串字段,识别所述特定字符串字段所包括的任何字符串物件,包括在每个以扫描步长为间距的位置上,扫描所述特定字符串字段,以查找所述一个或多个字符串物件的所述多个定长特征码,其中包括并行扫描两个或两个以上定长特征码,和输出所述特定字符串字段中的任何已识别的字符串物件。所述方法可进一步包括为每个字符串物件选择多个基于多组不重叠的有序的定长特征码的不定长特征码,所述多个不定长特征码中的每个不定长特征码包括每组定长特征码中的一个定长特征码和一个把一对相邻的定长特征码连接起来的不定长特征码段,从而使得每个字符串物件的特征码的数目等于Sn,其中S是扫描步长或每组定长特征码的特征码的数目和η是定长特征码的组数,和所述识别所述特定字符串字段中的任何字符串物件进一步包括扫描所述特定字符串字段,以查找一个或多个字符串物件的多个不定长特征码的多个定长特征子码,和在有一个或多个匹配的定长特征子码的位置上,把已识别的定长特征子码合成为任何不定长特征码。
[0016]一般来说,本发明的一个方面的实施例提供字符串特征码扫描方法,所述方法包括为一个或多个字符串物件中的每个字符串物件选择一个或多个定长特征码,把所述一个或多个字符串物件的所述一个或多个定长特征码处理成一个或多个格式,所述格式包括每个定长特征码的一个或多个指纹和一个或多个后续查找数据结构,所述特定字符串物件的多个指纹包括第J个指纹,所述第J个所述指纹的第一基本单元在所述特定字符串物件中的在扫描方向上的位置除以特征码扫描操作的步长的余数等于J,从而使得所述特定字符串物件的指纹数等于特征码扫描操作的步长,并且使得所述特定字符串物件在任何被扫描的字符串字段中的任何位置上都能被识别,其中每个所述指纹包括所述特定字符串物件的所述一个或多个定长特征码中的特定定长特征码的一个或多个片段,所述一个或多个片段具有在所述特定定长特征码中的任何地方的特定位置,接收一个由数据值组成的特定字符串字段,识别所述特定字符串字段中的任何字符串物件,包括在每个扫描步长为间距的位置上,扫描所述特定字符串字段,以查找所述一个或多个字符串物件的多个所述指纹,其中包括并行查找两个或两个以上所述指纹,和在有一个或多个匹配的所述指纹的位置上,查找所述特定字符串字段,以查找所述后续查找数据结构,和输出所述特定字符串字段中的任何识别的字符串物件。所述方法可进一步包括为每个字符串物件选择多个基于多组不重叠的有序的定长特征码的不定长特征码,所述多个不定长特征码中的每个不定长特征码包括每组定长特征码中的一个定长特征码和一个把一对相邻的定长特征码连接起来的不定长特征码段指纹,从而使得每个字符串物件的不定长特征码的数目等于各组定长特征码的定长特征码的数目的乘积,和所述识别所述特定字符串字段所包括的任何字符串物件包括扫描所述特定字符串字段,以查找一个或多个字符串物件的多个指纹,包括以并行查找两个或两个以上指纹,和在有一个或多个匹配的指纹的位置上,查找所述特定字符串字段,以查找所述后续查找数据结构。本发明的所述方面的其它实施例包括所述方法所对应的系统,装置,和计算机软件产品。
[0017]—般来说,本发明一个方面提供了一个字符串特征码扫描系统,所述系统包括一个包括计算机程序产品的机器可读的存储设备,和一个或多个可执行计算机程序产品和操作包括以下一个或多个模块的处理器:一个可把一个或多个特征码处理成包括每个定长特征码或不定长特征码的每个定长特征子码的一个或多个指纹和一个或多个后续查找数据结构的一个或多个格式的特征码预处理模块,所述一个或多个指纹包括特定定长特征码或特征子码的第J个指纹,所述第J个指纹的第一基本单元在所述定长特征码或特征子码中的在扫描方向上的位置除以特征码扫描操作的步长的余数等于J,从而使得所述指纹的数目等于特征码扫描的步长,并且使得所述定长特征码或特征子码在任何被扫描的字符串字段中的任何位置上都能被识别,其中每个所述指纹包括特定定长特征码或特征子码的一个或多个片段,所述一个或多个片段具有在所述特定定长特征码或特征子码中的任何地方的特定位置,一个可把一个由数据值组成的输入字符串字段处理为一个或多个扫描所需的格式的扫描预处理引擎,和一个可在所述输入字符串字段上识别一个或多个特征码的一个或多个指纹的指纹扫描引擎,所述识别包括在每个扫描步长为间距的位置上,扫描所述输入字符串字段,以查找所述一个或多个特征码的所述一个或多个指纹。所述系统可进一步包括一个可识别已识别的指纹所对应的定长特征码或不定长特征码的定长特征子码的定长特征码查找引擎。所述系统可进一步包括一个包括把已识别的不定长特征码的定长特征子码合成为任何不定长特征码的可识别不定长特征码的不定长特征码查找引擎。本发明的所述方面的其它实施例包括所述系统所对应的方法,装置,和计算机软件产品。
[0018]具体实施可包括一个或多个以下特性。所述特征码预处理模块可选择一个或多个影子空间并把一个或多个指纹投影到所述一个或多个影子空间去扫描。特征码预处理模块可把一个或多个指纹中的每个指纹分解为一个或多个长度的一个或多个指纹段,并把每个指纹段的指纹合成信息存储到一个指纹数据库,和所述指纹扫描引擎可识别所述输入字符串字段中的一个或多个特征码的多个指纹,所述识别包括在每个以扫描步长为间距的位置上,扫描所述输入字符串字段,以查找多个指纹段,和在有一个或多个已识别的指纹段的位置上,把已识别的指纹段合成为任何指纹匹配。
[0019]所述特征码预处理模块可用一个或多个码膜比特,对一个特征码的一个或多个特征码段进行编码,并把所述一个或多个码膜比特和所述特征码的一个或多个特征码段存储在一起。所述特征码预处理模块可用多个特征码的一个或多个不同的基本单元构建一个差分查找数据结构。所述特征码预处理模块可构建一个包括一个指纹数据库,一个定长特征码数据库,和当所述特征码扫描系统有至少有一个不定长特征码时的一个特征码规则数据库的特征码数据库。
[0020]所述扫描预处理引擎可进一步包括一个扫描输送器,一个投影器,一个字符串字段存储器,和一个影子字段存储器。所述扫描预处理引擎可按块处理一块或多块的字符串字段,所述处理包括输送,解码,规格化,和变换其中的一个或多个,所述一块或多块字符串块中的每个字符串块包括一个用于指纹扫描及特征码查找的指纹扫描区域,一个用于特征码查找的在指纹扫描区域之前的前特征码查找区域,和一个用于特征码查找的在指纹扫描区域之后的后特征码查找区域。一字符串块的所述三个区域的每个区域可存储到一个或多个尺寸相同的内存块中,所有所述三个区域的所有内存块单独或与一个或多个附加内存块可构成的一个由当前的前特征码查找区域的第一内存块开头的环,以减少数据在内存中的移动。
[0021]所述指纹扫描引擎可用一个或多个散列表和一个或多个布隆过滤器其中的一个或多个来检测一个或多个指纹。所述指纹扫描引擎可进一步包括一个指纹扫描控制器,一个指纹散列计算器,一个指纹查找器,一个指纹合成器,和一个指纹数据库。所述指纹散列计算器可用一个顺序散列函数在多个相互不重叠的散列键的前缀片段上,按顺序计算多个散列键的多个散列值。所述指纹扫描引擎可包括一个用一个指纹段比特位图和指纹长度信息中的一个或多个把多个指纹段并行或串行地合成为任何指纹的匹配的指纹合成器。所述指纹扫描引擎可包括一个进一步包括一个或多个有限自动机(FA)的指纹合成器。
[0022]一个或多个长度的一个或多个指纹可被分解为多个相同大小的指纹段,并被一个或多个有相同扫描步长的指纹扫描引擎扫描,所述一个或多个指纹扫描引擎的每个指纹扫描引擎覆盖一个或多个不重叠的交错的所述输入字符串字段的位置,从而使得所述一个或多个指纹扫描引擎的总扫描步长等于所述一个或多个指纹扫描引擎的数目和单个指纹扫描引擎的原扫描步长的乘积,或覆盖一个或多个部分重叠的交错的所述输入字符串字段的位置,从而使得所述一个或多个指纹扫描引擎的总扫描步长介于单个指纹扫描引擎的原扫描步长,和所述一个或多个指纹扫描引擎的数目和单个指纹扫描引擎的原扫描步长的乘积之间。扫描步长和内存速度的乘积较小的指纹扫描引擎的数目可多于扫描步长和内存速度的乘积较大的指纹扫描引擎的数目。
[0023]覆盖一个较短的指纹段的一个或多个指纹扫描引擎所用的一个或多个内存可等于或快于覆盖一个较长的指纹段的一个或多个指纹扫描引擎所用的一个或多个内存,和覆盖一个或多个平均长度较短的指纹所对应的一个或多个定长特征码查找引擎所用的一个或多个内存可等于或快于覆盖一个或多个平均长度较长的指纹所对应的一个或多个定长特征码查找引擎所用的一个或多个内存。一个或多个覆盖短于特定长度的指纹的指纹扫描引擎,单独或与所对应的定长特征码查找引擎的第一部分一起可用一个或多个在所述扫描系统中最快的内存。扫描相同的一个或多个指纹的多个指纹扫描引擎可共用一个多端口内存。所述指纹扫描引擎可进一步包括一个或多个内容寻址存储器(CAM)。
[0024]所述定长特征码查找引擎可进一步包括一个特征码搜寻器,一个特征码核实器,和一个定长特征码数据库。所述特征码搜寻器和所述特征码核实器可用一个特征码单元比较器和一个特征码段比较器来比较一个或多个带码膜的一个特征码的片段,以识别一个或多个定长特征码。所述特征码搜寻器可差分查找一个或多个定长特征码或特征子码。所述不定长特征码查找引擎可进一步包括一个特征码合成规则查找器,一个特征码状态验证器,一个特征码合成规则数据库,和一个特征码状态表格。所述不定长特征码查找引擎可包括一个有限自动机(FA)。一个或多个引擎可包括一个或多个内容寻址存储器(CAM)和一个或多个有限自动机(FA)其中的一个或多个。
[0025]本说明书所述具体实施例可用来实现以下一个或多个优点。本发明提供了一个扫描一个特征码库中的特征码的字符串扫描系统。所述字符串扫描系统灵活且容易被更新。一个字符串特征码扫描引擎即使当扫描大量的特征码(如几十万个特征码),复杂的特征码(如长达几千字节,或带通配符和“ ? ”,范围,不区分大小写,逻辑非),和一个动态的特征码库时,仍可提供极快的扫描速度(如IOOGbps)。所述字符串扫描系统的扫描速度和特征码库的大小和复杂性可扩展性。此外,所述字符串扫描系统需求较小的内存和内存带宽。所述字符串扫描系统可以用软件或现场可编程门阵列(FPGA)或专用集成电路(ASIC)来实施。此外,所述字符串扫描系统的成本效益高,既适用于高端产品,也适用于低价产品。
[0026]本发明的一个或多个实施例详见如下说明书和附图。本发明的其它特征和优点由说明书、附图、和权利要求书显而易见。
【专利附图】
【附图说明】
[0027]图1A示出了一个示例性快速字符串特征码扫描系统的结构图;
[0028]图1B示出了一个构建字符串特征码数据库的示例性流程图;
[0029]图1C示出了一个字符串特征码扫描的示例性流程图; [0030]图2A-2C示出了一个指纹数据库的示例性数据结构;
[0031]图2D-E示出了一个散列条目块的示例性数据结构和一个指纹合成器的实施例;
[0032]图2F-2G示出了一个散列条目块的示例性数据结构和一个对应的指纹合成器的实施例;
[0033]图2H-1示出了一个散列条目块的示例性数据结构和一个对应的并行指纹合成器的实施例;
[0034]图3A-B示出了用于定长特征码查找的特征码群链表和特征码链表的示例性数据结构;
[0035]图4A-B示出了一个字符串字段的支持一个预定义的全局单元范围的一个示例性特征码单元比较器和一个特征码段比较器的结构图;
[0036]图4C示出了一个支持本地特征码单元范围的示例性特征码单元比较器的结构图;
[0037]图5A-C示出了一个用于定长特征码查找的选择单元树和特征码家庭链表的示例性数据结构;
[0038]图6示出了一个用于不定长特征码查找的特征码规则链表的示例性数据结构;
[0039]图7示出了一个特定字符串字段的特征码状态链表的示例性数据结构;
[0040]图8示出了一个被一个特征码状态布隆过滤器或散列表所指的散列条目块的示例性数据结构;
[0041]图9示出了一个示例性计算机系统。
[0042]在各附图中类似的附图标记和标示表示类似的元件。【具体实施方式】
概观
[0043]本发明为针对一个字符串特征码数据库对一个字符串字段进行扫描的方法和系统。在一个实施例中,一个“分而治之”的扫描方法被用来以多个流水线阶段进行扫描。每个不定长特征码首先被分解成多个定长特征子码来扫描,而每个定长特征码或每个不定长特征码的每个定长特征子码再进一步被分解成多个特征码段来扫描。在一个实施例中,先“粗扫描”后“细扫描”的方法被用来以多流水线扫描阶段进行扫描,以查找字符串特征码。在每一个扫描位置上,定长特征码或定长特征子码的一个或多个指纹首先被扫描。进一步的检查只需要在有一个或多个指纹匹配的位置上进行。此外,指纹扫描可先在每一个扫描位置上扫描指纹影子(影子和影子相关的空间将在下面详细介绍)。只有在有一个或多个匹配的指纹影子的位置上,才需对所述指纹进行全面的检查。
[0044]所述指纹影子可进一步先分段在每个扫描位置上扫描,然后再通过仅检查指纹影子段在任何指纹中的可能的位置和可能的指纹长度把指纹影子段进行合成。指纹影子的全面的检查只需要在有一个或多个匹配的合成的指纹影子的位置上进行。此外,指纹影子段的扫描只需在每一个扫描位置上对其散列值进行扫描。进一步的检查指纹影子段只需在有一个或多个匹配的散列值的位置上进行。在一个实施例中,在扫描之前先把用于扫描字符串字段的字符串特征码预处理,并将预处理过的特征码存储到特征码数据库中,以提供给多流水线阶段扫描使用。
[0045]图1A示出了一个快速字符串特征码扫描引擎100。所述扫描引擎包括一个特征码预处理模块90,一个扫描预处理引擎120,一个指纹扫描引擎140,一个定长特征码查找引擎160,和一个不定长特征码查找引擎180。快速字符串特征码扫描引擎100针对一个或多个字符串特征码数据库,对字符串字段进行扫描,并可能送回已匹配的特征码的编号190和在所述字符串字段内的位置,以识别特定特征码。在一个实施例中,特征码数据库包括一个指纹数据库148,一个定长特征码数据库166,和一个特征码规则数据库186。
[0046]图1B示出了一个预处理每个字符串特征码的程序91。在一个实施例中,首先将一个不定长特征码分解为多个定长特征子码和不定长特征子码,并把定长特征子码之间的关系的信息存储到特征码规则数据库186中(步骤92)。
[0047]为了快速扫描,步骤92输出的一个定长特征码或特征子码可以进一步被分解成多个可按最佳次序检验的片段(步骤94)。在一个实施例中,第一个或前几个特征码段特别重要,可以作为定长特征码或特征子码的指纹。一个字符串特征码的指纹既可以被快速地扫描,又可以减少假阴性或假阳性匹配的概率。在一个实施例中,假阴性匹配的概率是零。在一个实施例中,多个特征码的不同指纹长度的数目比多个特征码的不同特征码长度的数目要少,从而加快要求对不同长度的模式进行单独扫描的扫描方法的速度。在一个实施例中,当扫描步长大于一个基本单元时,多个指纹可以用于一个字符串特征码,其中每个指纹的第一个基本单元在扫描方向上相对前一个指纹的第一个基本单元位移了一个或多个基本单兀。扫描方向是一个扫描操作在一个输入字符串字段中扫描位置的移动的方向。
[0048]一个定长特征码或特征子码的指纹可以进一步分解为指纹段,根据需要可以进一步投影到一个或多个影子空间,然后加入到指纹数据库148并从而到特征码数据库中去(步骤96)。由于不同长度的指纹可能被独立扫描,指纹可以进一步分解成多个指纹段进行并行或串行扫描。在一些实施例中,指纹被分解成多个指纹段,从而使得不同指纹段长度的数目为一或远比不同指纹长度的数目少,从而加快要求对不同长度的模式进行单独扫描的扫描方法的速度。指纹段的扫描结果可以随后被合成到一起,以检测指纹。
[0049]在一个实施例中,为了进一步提高扫描效率和扫描复杂特征码的能力,指纹及其它特征码段可以先被投影到一个或多个影子空间进行扫描,然后再在原始空间进行验证。影子空间可以选择既能够简化和加速扫描过程,同时还可以覆盖指纹或指纹段的所有可能的格式。一个影子空间可以覆盖多个指纹或特征码段的格式。例如,为了同时支持区分大小写和不区分大小写的单个字符,影子空间可以为只有小写或只有大写的空间。作为一个特例,影子空间可以就是原始空间。
[0050]完全指明的指纹或任何其它特征码段在任何影子空间的影子仍是完全指明的。因此,完全指明的指纹除在原始空间以外,总可以在任何影子空间扫描。在一个实施例中,为了减少所需扫描的空间的数目,所有的完全指明的指纹都在一个或多个影子空间中的一个影子空间扫描,使得没有指纹要在原始空间扫描。在另一个实施例中,一个特征码数据库的影子空间只有一个,所述特征码数据库的所有的指纹都在所述唯一的影子空间扫描。
[0051]在一个实施例中,指纹数据库包括一个或多个布隆过滤器或散列表。当原散列键太长或太昂贵在指纹扫描过程中进行比较时,为了进一步减少假阳性匹配和散列碰撞的概率,在另一个实施例中,指纹数据库包括一个或多个存有附加的散列值比特或一个指纹长度或两者的改进型布隆过滤器或散列表。
[0052]最后,所有定长特征码或不定长特征码的定长特征子码的片段被编码并被存储到定长特征码数据库166中,以查找定长特征码或特征子码(步骤98)。在一个实施例中,所述片段可以用单元膜或亚单元膜进行编码,以支持字符串特征码匹配的特定条件(如“不用匹配”,“相等”,“不相等”,“不区分大小写”,“区分大小写”,“在一个范围内”,“在一个范围夕卜”)。在一个实施例中,带码膜的片段可以随后被编译成一个链表或任何其它查找结构(如树等)。在另一个实施例中,片段码膜或定长特征码或特征子码码膜可以被编译成查找结构,以节省存储空间。在另一个实施例中,一组字符串特征码可以进一步利用字符串特征码之间的不同单元进行差分编码,以形成可快速查找的差分数据结构(如差分树等)。
[0053]图1C演示了一个字符串特征码的扫描程序101。一个待扫描字符串字段首先要被解码并被变换到(如用扫描预处理引擎120) —个或多个后续扫描阶段所需要的格式(步骤102)。所述符串字段首先在影子空间通过对其影子与一个或多个字符串特征码的指纹的影子进行比较而被扫描(如用指纹扫描引擎140),然后再在原始指纹空间对任何已识别的指纹影子(步骤104)进行核实。步骤106查看是否有一个指纹匹配。
[0054]在扫描之后,无匹配或有一个匹配分别产生一个表示没有特征码匹配的输出或一个表示有少数几个特征码匹配的输出。在一个实施例中,指纹扫描引擎140可提供零假阴性匹配和一个足够小的假阳性匹配几率。如果没有指纹匹配,当前扫描位置的扫描已完成,可以移动到下一个扫描位置(步骤108)。如果有指纹匹配,将对少数几个匹配的特征码作进一步的查找(如用定长特征码查找引擎160),以更加明确地识别为定长特征码或不定长特征码的定长特征子码(步骤110)。
[0055]步骤112查看是否有一个定长特征码或特征子码匹配。如果没有匹配,当前扫描位置的扫描已完成,可移动到下一个扫描位置(步骤108)。如果有一个或多个定长特征码匹配,输出每个匹配的定长特征码的编号,且结束当前扫描位置的扫描(步骤118)。如果有作为一个或多个不定长特征码的一部分的定长特征子码被识别,已匹配的特征子码将被动态地合成(如用不定长特征码查找引擎180)以检测一个或多个不定长特征码(步骤114)。步骤116查看是否有一个不定长特征码匹配。如果没有匹配,当前扫描位置的扫描已完成,可以移动到下一个扫描位置(步骤108)。如果有一个或多个匹配,输出每个匹配的不定长特征码的编号,且结束当前扫描位置的扫描(步骤118)。
[0056]在特征码的预处理过程91中,在一个实施例中,每个指纹的假阳性匹配的概率被存储在指纹数据库148中。如果步骤106有一指纹匹配,所述匹配的指纹的假阳性匹配的概率将被查看。如果所述假阳性匹配的概率足够低(如低于指定的阈值),当前扫描位置的扫描过程已完成,可以移动到下一个扫描位置(步骤108)。在另一个实施例中,所有数据库中的指纹的假阳性匹配的概率都足够低,因此不需储存和查看指纹的假阳性匹配的概率。当前扫描位置的扫描过程在指纹扫描后已完成,可以移动到下一个扫描位置(步骤108)。
[0057]在步骤102中,扫描预处理引擎120首先将所述字符串字段解码,规格化,并变换为与特征码数据库中的特征码相同的格式。在一个实施例中,字符串特征码扫描是在整个字符串字段上进行。然而,在另一个实施例中,由于一些系统的存储空间的限制或低延迟要求,储存整个字符串字段不可能。因此,在步骤102时,所述字符串字段可以被分解成几个预定大小的字符串块。字符串特征码扫描是在每一个预定大小的字符串字块上进行。
[0058]在加载一字符串块后,所述字符串块将被解码,规格化,并变换为以后扫描阶段所需要的不同格式。在一个实施例中,解码和规格化过程可以支持不同的压缩格式(如LZS,PKZipJP gzip),不同的编码标准(如UU编码,MME编码,HTML,和XML),和删除随机“反扫描”垃圾数据。
[0059]在一个实施例中,解码后的字符串字段将被进一步投影到一个或多个特征码数据库要求的影子空间,以支持复杂的特征码。例如,解码后的字符串字段被转换为全小写字(如一个影子空间),以支持不区分大小写的字符串特征码扫描。字符串特征码扫描可以先在全小写已解码字符串字段上进行,然后再用原区分大小写的已解码字符串字段和全小写已解码字符串字段进行验证。
[0060]在步骤104中,指纹扫描可首先识别其影子为完全指明的指纹。为了快速扫描大量且复杂的特征码,在一个实施例中,指纹扫描引擎140可以用一个或多个散列表或布隆过滤器同时扫描多个基本单元。在一个实施例中,指纹扫描引擎140可用散列值复用和指纹长度复用来提高储存器的使用效率和减小假阳性匹配和指纹碰撞的概率。散列值复用和指纹长度复用可以在保证零假阴性匹配(即错过一个特征码匹配)的同时,进一步减小假阳性匹配(即错误的特征码匹配)的概率。
[0061]步骤110扫描定长特征码。定长特征码或不定长特征码的定长特征子码可在所述定长特征码扫描阶段识别。定长特征码扫描只需当指纹扫描过程中至少有一个指纹匹配时才执行。已匹配的指纹所对应的定长特征码或特征子码可以被逐个进行匹配或用其它查找结构(如树等)进行匹配。在一个实施例中,基本单元或亚基本单元的带码膜比较可以用来支持字符串特征码匹配的特定条件(如“不用匹配”,“相等”,“不相等”,“不区分大小写”,“区分大小写”,“在一个范围内”,“在一个范围外”)。[0062]步骤114扫描不定长特征码。在一个实施例中,不定长特征码扫描只需在扫描有一个或多个不定长字符的不定长特征码时才执行。不定长特征码的定长特征子码在定长特征码扫描阶段被识别,已识别的定长特征子码可在不定长特征码扫描阶段被动态地连接在一起,以合成为一个或多个原不定长特征码。所述合成可以用一个静态合成规则表和一个动态合成状态表来实现。所述合成规则表指明将定长特征子码合成为不定长特征码的规贝1J,所述合成状态表则根据所述合成规则表维护当前的合成状态。
特征码数据库的预处理
[0063]在一个实施例中,为了提高扫描速度和内存效率,在扫描所述字符串字段之前,特征码预处理模块90对特征码进行预处理。在存入特征码数据库之前,特征码预处理模块90可以先把特征码分解,变换,和编码成一个或多个格式。在一个实施例中,特征码预处理模块90可以构建和维护一个指纹数据库148,一个定长特征码数据库166,和一个特征码规则数据库186。
[0064]当特征码数据库有一个或多个特征码含一个或多个不定长子码(如代表零个以上任意的基本单元的或代表“be”重复3至6次的“ (be) {3-6} ”),每个这样的不定长特征码可以先用不定长特征子码被分解成多个定长特征子码。例如,如果一个特征码为“子码I*子码2*子码3”,其中子码1,子码2,和子码3都是不含不定长字符的定长子码,所述特征码可以被分解为子码1,子码2,子码3。子码I*子码2*子码3中的每个所述可被一个不定长子码取代。在一个实施例中,每个所述定长特征子码可以先被独立地扫描,然后再将其合成为原不定长特征码。
[0065]在一个实施例中,特征码规则数据库186可用每个定长特征子码的位置信息(如次序,最后子码标志,到下一个定长子码的距离或距离范围)来构建,以用于合成定长特征子码。在一个实施例中,当两个连续的定长特征子码之间的不定长子码不为“不用匹配”,所述特征码规则数据库186可进一步含对所述不定长子码的描述,以用于合成定长特征子码。在另一个实施例中,可用所述定长特征子码和不定长特征子码构建一个或多个有限自动机(FA),以用于合成定长特征子码,其中每个定长特征子码作为一个整体为一个输入符号。
[0066]在一个实施例中,一个定长特征码或特征子码将被进一步被分解成多个可以用最佳的顺序进行查找的片段(这些片段包括所述特征码或特征子码的所述指纹)。所述多个片段可以有不同的尺寸或相同的尺寸。为了防止假阴性匹配或不错过任何一个特征码,所有所述片段的集合等于原定长特征码。在特征码扫描的过程中,随着匹配的片段的数目的增力口,假阳性匹配值将降低(即匹配的可信度增加)。扫描的过程将终止于第一个不匹配的片段或最后一个匹配的片段。在一个实施例中,特征码的片段的选择可以让无匹配终止或识别一个零假阳性匹配的特征码匹配尽早出现。
[0067]在一个实施例中,所述指纹包含多个片段。在另一个实施例中,所述指纹只有一个片段,并被编码为三元组{片段,长度,错位},其中片段为字符串特征码的第一个被扫描的片段即所述特征码的指纹,长度为所述指纹的长度,错位为所述指纹在一个定长特征码或特征子码中的错位。特定指纹是一个定长特征码或不定长特征码的定长特征子码的特定片段。
[0068]在一个实施例中,所述影子空间可以被选择能够简化和加快所述特征码扫描的过程,同时能够覆盖所述多种指纹或特征码片段的格式。在理想情况下,所述影子值可以直接作为一个散列键。例如,为了同时支持区分大小写和不区分大小写的单元,所述影子空间可以是全小写或全大写的空间。例如,为了扫描由一个字母后接7个数字组成的驾驶证号码,其中每个字母和数字可以进一步指定为任意的字母和数字的范围,影子空间可以用一代码或任何一个字母(如“a”)代替所有的字母,并用另一代码或任何一个数字(如“O”)代替所有的数字。例如,为了扫描由三组被空格或分隔开的三位数字所组成的社会安全号码(SSN),其中每个数字可以进一步被指定为任意的数字范围,影子空间可以用一代码或任何一个数字(如“O”)代替所有的数字,并用另一代码或空格或代替空格和作为一个特例,所述影子空间可以就是原空间。
[0069]在一个实施例中,指纹在影子空间被扫描完之后,指纹的验证可以在检测到指纹影子之后立刻在原空间进行。在另一个实施例中,所述验证可以在先验证其它片段的部分或全部后再进行。如果所述指纹完全被其它片段所覆盖,不需验证。
[0070]指纹的选择既要加快所述指纹扫描的速度,同时还要提供最小的在指纹扫描之后的假阳性匹配的概率。在一个实施例中,所述指纹可以为任意尺寸和在所述特征码中的任意位置上。在另一个实施例中,为了满足系统的要求,所述指纹的尺寸或在所述特征码中的位置受限制。例如,为了满足系统的延迟要求,所述指纹的错位不能超过某特定值。
[0071]在一个实施例中,指纹可以用以下一个或多个条件选择:
1)所述指纹的所述影子没有通配符或范围,以被较快扫描,
2)所述指纹在所述待扫描的字符串字段中出现的概率很小,
3)多个特征码共用的指纹的数目尽可能地小,和
4)有一个相同的指纹段的指纹的数目尽可能地小。
[0072]其它选择的条件可以根据系统的要求而增加。在常见的网络应用和非网络应用中,通常所有或大多数字符串特征码都至少含有一段相当长的,在投影到一个选定的影子空间中之后没有通配符或范围的片段。在一个实施例中,第一个选择条件为一个必要条件。在另一个实施例中,第一个选择条件可以进一步限制为所有指纹的每个指纹至少在一个影子空间中为完全指明。不含符合选择条件的指纹的特征码,可以被扩展为多个含有符合选择条件的指纹的特征码,或用一个不需特征码扩展的不同扫描方式扫描。
[0073]所述指纹可以通过检查所有符合第一选择条件的一个特征码的片段来选择。其它指纹的参数也可以在选择指纹的时候被加以考虑。根据第二选择条件,选择在所述待扫描的字符串字段出现的概率很小的特征码段作为指纹,可以减少假阳性指纹匹配的概率。此夕卜,让有一个相同的指纹段的指纹的数目尽可能地小,可以进一步减少假阳性指纹匹配的概率。尽管所述指纹的长度可以少于8个基本单元或多于32个基本单元,但是通常在8至32基本单元之间。
[0074]由于所述特征码可以很长(如数百或上千个基本单元),指纹的长度可能也很多。然而,在一个实施例中,不同长度的指纹要单独扫描,从而扫描速度较慢。在一个实施例中,为了减少扫描的复杂性,可以根据特定系统要求和系统架构来限制指纹长度的数目,如少于16。在一个实施例中,指纹的长度可以从一个预定的长度表中选定。此外,指纹的长度可以根据系统要求和系统架构,按指数递增关系(如2,4,8,16,和32),线性递增关系(如4的倍数:4,8,12,16,20,24,28,和 32),或另一关系(如 2,3,5,8,13,21,34)来选择。[0075]在一个实施例中,一个特征码的指纹可以用一个算法来选择。例如,以下算法可以用来选择一个定长特征码或特征子码的指纹(假设扫描步长等于1,指纹的长度从最短至最长固定为lo,I1, 12,…,Iffl-!, Im,指纹扫描分段进行,指纹扫描的影子空间已给定):
1.找到所有在影子空间为完全指明的特征码子段。
2.对每一个长于的Im的所述的子段,找到所有长度等于Im的子段。
3.对每一个长度等于Im的子段,记下所述子段在所有特征码中已被选为指纹的次数N。和与其它指纹有相同的第一指纹段的次数Ns,和用一个基于N。,Ns,和Im的成本函数算出成本值。
4.分别用长度等于Inri,…,12,I1,和Itl的子段重复步骤2和3。
5.从步骤2到4中,找出最小成本的子段为一个指纹。
[0076]上述步骤与特征码的处理顺序有关。几个随机处理顺序可以根据需要用来找到不同的指纹。在一个实施例中,成本值等于把(m-1), N。,和Ns从最高位到最低位联接起来,其中i=0,l,2,…,m和i为指纹的长度。在一个实施例中,如果已找到特定长度的指纹,不需要再对所有更短的子段进行选择。
[0077]在另一个实施例中,指纹扫描引擎140每次移动一个扫描步长。在每个扫描位置上,指纹扫描引擎140串行或并行地扫描不同长短的指纹。因此,扫描速度与扫描步长(即连续两个扫描位置之间的基本单元的数目)成正比。在一个实施例中,为了提高扫描速度,指纹扫描可以同时扫描多个基本单元,而不是一个基本单元。为了确保零假阴性匹配,每个字符串特征码要用多个指纹且所述指纹的数目等于所述扫描步长。换言之,一个定长特征码或特征子码可以用多个指纹放入到特征码数据库且所述指纹的数目等于扫描步长。特定特征码的第J个指纹的第一个基本单元是所述特定特征码在扫描方向的第(J+k*S)个基本单元,其中S为扫描步长,k为一个非负整数,和J=0,l,2,, S-1。所述特征码就可以在所述待扫描的字符串段中的任何位置找到。例如,如果特定特征码为“ [Rr] [Ee] [Aa] [Dd][Mm] [Ee]123.exe”,所述扫描步长为4,所述指纹长度包括4,8和12,可以选用以下四个指纹:“ [Rr] [Ee] [Aa] [Dd] [Mm] [Ee] 123.ex”, “ [Ee] [Aa] [Dd] [Mm] [Ee] 123.exe”,“ [Aa] [Dd][Mm] [Ee]123.”,和 “[Dd] [Mm] [Ee]123.e”,其中[Rr], [Ee],[Aa],[Dd],和[Mm]分别为不区分大小写的英文字母r, e, a, d,和m。“ [Rr] [Ee] [Aa] [Dd] [Mm] [Ee] 123.exe”用所述四个指纹放入到指纹数据库四次。当扫描步长为I时,只需一个指纹且只需放入一次。
[0078]所述多个指纹的扫描可以从输入字符串字段的前S个单元中(即在第一扫描步长内)的任何位置开始。例如,在一个实施例中,所述扫描从第O位置开始,将扫描第(k*S)位置,其中k为一个非负整数。在任何输入字符串字段中,第(k*S)位置被第O个指纹覆盖,第(k*S+l)位置被第(S-1)个指纹覆盖,第(k*S+2)位置被第(S-2)个指纹覆盖,...,和第(k*S+S-l)位置被第1个指纹覆盖。在另一个实施例中,扫描从第(S-1)位置开始,将扫描第(k*S+S-l)位置,其中k为一个非负整数。在任何输入字符串字段中,第(k*S)位置被第(S-1)个指纹覆盖,第(k*S+l)位置被第(S-2)个指纹覆盖,第(k*S+2)位置被第(S-3)个指纹覆盖,...,第(k*S+S-2)位置被第I个指纹覆盖,和第(k*S+S-l)位置被第O个指纹覆
至JHL ο [0079]为了把所述扫描步长提高到S个基本单元,在一个实施例中,以上当扫描步长为I时的为每个定长特征码或特征子码选择一个指纹的算法可以做如下修改,以用来选择每个定长特征码或特征子码的所述S个指纹:步骤I至4和以前完全一样,步骤5则修改为从所有在步骤2中找到的、所述定长特征码或特征子码的在扫描方向的错位为(J+k*S)的子段中,找出最小成本值的子段为所述S个指纹中的第J个指纹,其中J=0,1,2,...,S-1和k为
一个非负整数。
[0080]通常每个字符串物件只有一个特征码,为支持S基本单元的扫描步长,每个定长特征码或不定长特征码的定长特征子码需要S个指纹。在另一个实施例中,为支持S基本单元的扫描步长,S个定长特征码可以用来识别一个字符串物件,从而使得每个定长特征码在扫描方向的第一个基本单元在所述字符串物件的错位为(J+k*S),其中J=0,1,2,...,(S-1)和k为一个非负整数。所述特定字符串物件就可以在任何待扫描字符串字段的任何位置上被识别。在一个实施例中,S个定长特征码的扫描可以不用指纹。在另一个实施例中,S个定长特征码中的每一个特征码可以用一个指纹来进行特征码扫描。[0081]在一个实施例中,多个基于多组不重叠的有序的定长特征码的不定长特征码可以进一步被选择用来识别一个字符串物件。每组定长特征码有S个定长特征码,其中第J个定长特征码在扫描方向的第一个基本单元在所述字符串物件的错位为(J+k*S),其中J=0,l,2,...,(S-1)和k为一个非负整数,从而构成Sn个不定长特征码,其中η是不重叠的有序的有S个定长特征码的码组的组数。从每组定长特征码中选择出一个定长特征码,然后再将这些定长特征码和一个或多个不定长字符串段组合成SSn个不定长特征码中的一个不定长特征码,从而使得所述特定字符串物件可以在任何待扫描字符串字段的任何位置上被识别。所述η组S定长特征码中的每个原定长特征码在合成后变为多个合成后的不定长特征码的一个定长特征子码。在一个实施例中,所述不定长特征码的扫描可以不用指纹。在另一个实施例中,所述不定长特征码中的每一个定长特征码可以选用一个指纹来扫描。
[0082]在一个实施例中,为支持S基本单元的扫描步长,特定字符串物件可以选用P个定长特征码,每个定长特征码可进一步选用一个或多个指纹,从而使得每个字符串物件的总指纹数等于S。所述特定字符串物件的S个指纹中的第J个指纹在扫描方向的第一个基本单元在所述特定字符串物件中的错位为(J+k*S),其中J=0,l,2,...,(S-1)和k为一个非负整数,从而使得所述字符串物件可以在任何待扫描字符串字段的任何一个位置上被识别。
[0083]在另一个实施例中,多个基于多组不重叠的有序的定长特征码的不定长特征码可以进一步被选择用来识别一个字符串物件。第i组不重叠且有序的定长特征码有Pi个定长特征码,其中每个定长特征码进一步有一个或多个指纹,从而使得第i组定长特征码的总指纹数等于S,其中i=0,1,2,...,n-1和η为不重叠且有序的定长特征码组的组数。每组定长特征码的S个指纹中的第J个指纹在扫描方向的第一个基本单元在所述特定字符串物件中的错位为(J+k*S),其中J=O,1,2,..., (S-1)和k为一个非负整数。
[0084]从每组定长特征码中选择出一个定长特征码,然后再将这些定长特征码和一个或多个不定长字符串组合成Pc^PdP2"*-Plri个不定长特征码中的一个不定长特征码,从而使得所述特定字符串物件可以在任何待扫描字符串段的任何位置上被识别。所述η组定长特征码中的每个原定长特征码变为多个合成后的不定长特征码的一个定长特征子码。
[0085]在一个扫描系统的每个字符串物件的特征码,指纹,和影子空间确定以后,一个指纹的影子可以作为一个整体进行扫描。不同长度的指纹影子可以并行或串行扫描。在一个实施例中,不同长度的指纹的影子可以作为一个整体进行串行扫描。在一个实施例中,把一个字符串特征码编入所述特征码数据库可用以下伪代码:
【权利要求】
1.一种字符串特征码扫描方法,所述方法包括: 把一个或多个不定长特征码处理成一个或多个格式,所述处理包括把一个或多个不定长特征码中的每个不定长特征码分解成一个或多个定长特征码段和一个或多个不定长特征码段,并且为所述一个或多个不定长特征码的一个或多个定长特征码段构建一个或多个用于查找定长特征码段的数据结构和为所述一个或多个不定长特征码构建一个或多个用于查找不定长特征码的数据结构,其中所述一个或多个用于查找不定长特征码的数据结构被所述一个或多个用于查找定长特征码段的数据结构所指; 接收一个由数据值组成的字符串字段; 在每个扫描位置上用所述一个或多个用于查找定长特征码段的数据结构扫描所述字符串字段以查找所述一个或多个不定长特征码的一个或多个定长特征码段; 在有一个或多个匹配的定长特征码段的扫描位置上用被所述一个或多个已匹配的定长特征码段所指的一个或多个用于查找不定长特征码的数据结构查看所述字符串字段以查找与所述一个或多个已匹配的定长特征码段相关的一个或多个不定长特征码;和 输出所述字符串字段中的任何匹配的不定长特征码。
2.根据权利要求1所述方法,所述一个或多个不定长特征码的一个或多个定长特征码段全是完全指明的。
3.根据权利要求1所述方法,所述一个或多个不定长特征码的一个或多个定长特征码段尽可能长。
4.根据权利要求1-3其中之一所述方法,所述一个或多个用于查找定长特征码段的数据结构包括一个或多个散列表,或一个或多个布隆(Bloom)过滤器,或一个或多个有散列值复用或长度复用的散列表,或一个或多个有散列值复用或长度复用的布隆过滤器。
5.根据权利要求1-3其中之一所述方法,所述一个或多个用于查找定长特征码段的数据结构包括一个或多个确定有限自动机(DFA)或不确定有限自动机(NFA)。
6.根据权利要求1-3其中之一所述方法,所述查看字符串字段以查找同一个或多个已匹配的定长特征码段相关的一个或多个不定长特征码包括检查所述已匹配的定长特征码段的位置信息或所对应的不定长特征码的编号,其中所述定长特征码段的位置信息包括所述定长特征码段在所相关的不定长特征码中的顺序,或是否在最前或最后,或到下一定长特征码段的距离或距离范围。
7.根据权利要求1-3其中之一所述方法,所述一个或多个用于查找不定长特征码的数据结构包括一个或多个确定有限自动机(DFA)或不确定有限自动机(NFA)。
8.一种字符串特征码扫描系统,所述系统包括: 一个可把一个或多个特征码处理成一个或多个格式的特征码预处理模块,所述处理包括把一个或多个不定长特征码中的每个不定长特征码分解成一个或多个定长特征码段和一个或多个不定长特征码段,并且为所述一个或多个不定长特征码的一个或多个定长特征码段构建一个或多个用于查找定长特征码段的数据结构和为所述一个或多个不定长特征码构建一个或多个用于查找不定长特征码的数据结构,其中所述一个或多个用于查找不定长特征码的数据结构被所述一个或多个用于查找定长特征码段的数据结构所指; 一个可在一个字符串字段中的每个扫描位置上用所述一个或多个用于查找定长特征码段的数据结构识别一个或多个定长特征码段的定长特征码扫描引擎;和一个可在有一个或多个匹配的定长特征码段的扫描位置上用一个或多个被所述一个或多个已匹配的定长特征码段所指的用于查找不定长特征码的数据结构识别与所述一个或多个已匹配的定长特征码段相关的一个或多个不定长特征码的不定长特征码查找引擎。
9.根据权利要求8所述系统,所述一个或多个不定长特征码的一个或多个定长特征码段全是完全指明的或尽可能长。
10.根据权利要求8-9其中之一所述系统,所述定长特征码扫描引擎包括使用一个或多个散列表,或一个或多个布隆(Bloom)过滤器,或一个或多个有散列值复用或长度复用的散列表,或一个或多个有散列值复用或长度复用的布隆过滤器,或一个或多个确定性有限自动机(DFA)或不确定有限自动机(NFA),或一个或多个内容寻址存储器(CAM);所述不定长特征码查找引擎包括使用一个或多个确定性有限自动机(DFA)或非确定性有限自动机(NFA),或已匹配的定长特征码段的位置信息,或已匹配的定长特征码段所对应的不定长特征码的编号,其中所述已匹配的定长特征码段的位置信息包括所述已匹配的定长特征码段在所相关的不定长 特征码中的顺序,或是否在最前或最后,或到下一定长特征码段的距离或距离范围。
【文档编号】G06F17/30GK103793522SQ201410055830
【公开日】2014年5月14日 申请日期:2008年10月20日 优先权日:2008年10月20日
【发明者】王强 申请人:王强