CN113946345A - 一种基于字符级局部敏感哈希法进行同源性检测的方法 - Google Patents
一种基于字符级局部敏感哈希法进行同源性检测的方法 Download PDFInfo
- Publication number
- CN113946345A CN113946345A CN202111294922.4A CN202111294922A CN113946345A CN 113946345 A CN113946345 A CN 113946345A CN 202111294922 A CN202111294922 A CN 202111294922A CN 113946345 A CN113946345 A CN 113946345A
- Authority
- CN
- China
- Prior art keywords
- character
- fingerprint
- source code
- files
- sensitive hashing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Collating Specific Patterns (AREA)
Abstract
本发明公开一种基于字符级局部敏感哈希法进行同源性检测的方法,包括步骤一、筛选符合的后缀名源代码文件并除去文本和图片,步骤二、源代码预处理及滑窗处理并通过映射和进制转换得到最终指纹,步骤三、根据源代码计算出的指纹选择匹配同源文件,步骤四、查询结果后进行排序并选出最终选定版本;本发明从字符级直接对输入的字符进行滑窗处理,粒度更细,准确性更高,通过将较长的源代码转换为较短的指纹,不仅可以解决同源检测中的相似性问题,而且漏报率大大降低。
Description
技术领域
本发明涉及软件分析技术领域,尤其涉及一种基于字符级局部敏感哈希法进行同源性检测的方法。
背景技术
随着互联网的发展,开源代码增长迅速,绝大部分的开发者为了加快开发速度,直接将开源网站上的相近功能的代码拷贝到自己的软件中,然而,开发者在引入这些开源项目或代码时,经常会默认这些代码是完美的,不会出现任何问题,导致在完成相关业务功能后,开发者不会再去关注这些代码,会导致侵犯开源项目开发者的著作权,目前通常采用同源性检测技术去发现开发者软件中与开源项目中相似的文件,以便发现开发者软件中引用了哪些开源项目;
传统的同源性检测技术包括局部敏感哈希检测技术和SIMHASH检测技术,传统哈希检测技术无法解决同源检测的相似性问题,而SIMHASH检测技术能解决部分同源检测的相似性问题,但可能会导致漏报,因此,本发明提出一种基于字符级局部敏感哈希法进行同源性检测的方法以解决现有技术中存在的问题。
发明内容
针对上述问题,本发明的目的在于提出一种基于字符级局部敏感哈希法进行同源性检测的方法,该基于字符级局部敏感哈希法进行同源性检测的方法从字符级直接对输入的字符进行滑窗处理,粒度更细,准确性更高,通过将较长的源代码转换为较短的指纹,不仅可以解决同源检测中的相似性问题,而且漏报率大大降低。
为实现本发明的目的,本发明通过以下技术方案实现:一种基于字符级局部敏感哈希法进行同源性检测的方法,包括以下步骤:
步骤一、筛选文件
遍历输入的项目,从中筛选符合的后缀名的源代码文件,除去纯文本和图片文件;
步骤二、指纹计算
对筛选处理后的源代码文件进行预处理,再对预处理后的源代码用大小为5的滑窗处理并进行重新组合,并使用Person Hash将获取的字符映射为[0,127]的整数,创建长度为128的数组,遍历重新组合的一系列整数找出四分点并经映射得到指纹的二进制表示,最后将其转换为得到指纹;
步骤三、指纹匹配
根据源代码计算出的指纹从库中查找进行指纹匹配;
步骤四、确定成分
对数据库中查询出的结果将其对应到相应的成分及版本并进行排序,选取匹配文件数最多的作为该成分最终选定的版本。
进一步改进在于:所述步骤二中预处理的方法是将输入的源代码文件中的注释和空白符无用字符去除,并转换为小写。
进一步改进在于:所述步骤二中对预处理后的源代码用大小为5的滑窗处理,将滑窗中的字符每3位进行重新组合,保证原顺序不变且均包含首个字符。
进一步改进在于:所述步骤二中使用Person Hash将获取的字符映射后创建长度为128的数组,其各项初始值为0,然后遍历重新组合的整数,对应数组中下标和该整数相同的项数值+1。
进一步改进在于:所述步骤二中找出数组的四分点后根据四分点对数组中的值进行映射,得到指纹的二进制表示,再将其转换为16进制得到最终的指纹。
进一步改进在于:所述步骤三中指纹匹配时查找到相同值的数据即认为是同源文件,未查询到相同值的数据对该数据进行切断匹配,匹配的段数最多即认为最相似的同源文件。
进一步改进在于:所述步骤四中对应到相应的成分和版本后得到对应数据成分的对应版本匹配到的文件数,再按照匹配到的文件数对版本进行排序后选定最终版本。
本发明的有益效果为:本发明从字符级直接对输入的字符进行滑窗处理,粒度更细,准确性更高,通过将较长的源代码转换为较短的指纹,不仅可以解决同源检测中的相似性问题,而且漏报率大大降低。
附图说明
图1为本发明检测方法流程图。
图2为本发明实施例2指纹生成示意图。
图3为本发明指纹匹配示意图。
具体实施方式
为了加深对本发明的理解,下面将结合实施例对本发明做进一步详述,本实施例仅用于解释本发明,并不构成对本发明保护范围的限定。
实施例1
根据图1、2、3所示,本实施例提供了一种基于字符级局部敏感哈希法进行同源性检测的方法,包括以下步骤:
步骤一、筛选文件
遍历输入的项目,从中筛选符合的后缀名的源代码文件,除去纯文本和图片文件;
步骤二、指纹计算
1)将筛选处理后的源代码文件中的注释和空白符无用字符去除,并转换为小写;
2)再对预处理后的源代码用大小为5的滑窗处理,将滑窗中的字符每3位进行重新组合,保证原顺序不变且均包含首个字符;
3)使用Person Hash将获取的字符映射为[0,127]的整数;
4)创建长度为128的数组,其各项初始值为0,然后遍历2)中的一系列整数,相对应数组中下标和该整数相同的项数值+1;
5)找出数组的四分点后根据四分点对数组中的值进行映射,得到指纹的二进制表示,再将其转换为16进制得到最终的指纹。
步骤三、指纹匹配
根据源代码计算出的指纹从库中查找到相同值的数据即认为是同源文件,未查询到相同值的数据对该数据进行切断匹配,匹配的段数最多即认为最相似的同源文件;
步骤四、确定成分
对数据库中查询出的结果将其对应到相应的成分及版本,得到对应数据成分的对应版本匹配到的文件数,再按照匹配到的文件数对版本进行排序,选取匹配文件数最多的作为该成分最终选定的版本。
实施例2
根据图1、2、3所示,本实施例提供了一种基于字符级局部敏感哈希法进行同源性检测的方法,包括以下步骤:
步骤一、筛选文件
遍历输入的项目,从中筛选符合的后缀名的源代码文件,除去纯文本和图片文件;
步骤二、指纹计算
1)将筛选处理后的源代码文件中的注释和空白符无用字符去除,并转换为小写;
2)再对预处理后的源代码用大小为5的滑窗处理,每次移动一个字符,直到字符串末尾。假设每次获取到的滑窗内容为ABCDE,将其分为ABC、ABD、ABE、ACD、ACE、ADE;
3)使用Person Hash将获取的字符映射为[0,127]的整数i;
4)创建长度为128的数组a[128],其各项初始值为0,当进行1)时,每得到一个映射值i,则相应的a[i]++;
5)滑窗截止时,数组a[128]中值发生变化,找出数组的四分点Q1、Q2、Q3,即数组a[128]中25%的数据≤Q1,50%的数据≤Q2,50%的数据≤Q3;
6)根据四分点Q1、Q2、Q3对数组a[128]中的值X参照公式进行映射,再将其转换为16进制,得到最终的指纹。优选地,将得到的指纹切割为多段,和原指纹均存储到库中。
步骤三、指纹匹配
根据源代码计算出的指纹从库中查找到相同值的数据即认为是同源文件,未查询到相同值的数据对该数据进行切断匹配,匹配的段数最多即认为最相似的同源文件;
步骤四、确定成分
对数据库中查询出的结果将其对应到相应的成分及版本,得到对应数据成分的对应版本匹配到的文件数,再按照匹配到的文件数对版本进行排序,选取匹配文件数最多的作为该成分最终选定的版本。
实施例3
选取三种不同大小的文本,进行实施例1步骤测试,效果如下表
由表中可以看出当不同大小的文件进行不同程度修改时,局部敏感哈希在文件越小,改变越大,则指纹改变位数越多,越敏感,反之,变化位数越少,这一特性,恰是同源性检测所需要的。当修改导致文件变化过大时,是不需要匹配出来的。
实施例4
选取GitHub上star>10000的10个开源项目作为测试集。对其源代码文件进行筛选,去除非代码文件,最终获得源代码文件67685个,将这些源代码文件按照此发明的方法计算指纹,存入数据库中,作为底层匹配数据。
对这些项目中的源代码文件进行适量修改,计算指纹信息,从库中匹配成分信息,结果如下表所示。经统计分析,漏报来源于个别源代码过小,整体实际变化过大,然而这类文件在同源性匹配中是可以忽略的。误报来源于修改后的文件与库中其他文件更为相似。
项目名称 | 文件数量(个) | 匹配个数 | 漏报个数 | 误报个数 |
hadoop | 10480 | 10456 | 24 | 5 |
linux | 40173 | 40171 | 2 | 7 |
redis | 3796 | 3776 | 20 | 0 |
openssl | 1178 | 1175 | 3 | 0 |
elasticsearch | 10771 | 10759 | 12 | 1 |
vue | 376 | 375 | 1 | 0 |
zlib | 91 | 90 | 1 | 0 |
react | 662 | 657 | 5 | 0 |
tensorflow | 65 | 64 | 1 | 0 |
spring | 93 | 93 | 0 | 0 |
以上显示和描述了本发明的基本原理、主要特征和优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (7)
1.一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于包括以下步骤:
步骤一、筛选文件
遍历输入的项目,从中筛选符合的后缀名的源代码文件,除去纯文本和图片文件;
步骤二、指纹计算
对筛选处理后的源代码文件进行预处理,再对预处理后的源代码用大小为5的滑窗处理并进行重新组合,并使用Person Hash将获取的字符映射为[0,127]的整数,创建长度为128的数组,遍历重新组合的一系列整数找出四分点并经映射得到指纹的二进制表示,最后将其转换为得到指纹;
步骤三、指纹匹配
根据源代码计算出的指纹从库中查找进行指纹匹配;
步骤四、确定成分
对数据库中查询出的结果将其对应到相应的成分及版本并进行排序,选取匹配文件数最多的作为该成分最终选定的版本。
2.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤二中预处理的方法是将输入的源代码文件中的注释和空白符无用字符去除,并转换为小写。
3.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤二中对预处理后的源代码用大小为5的滑窗处理,将滑窗中的字符每3位进行重新组合,保证原顺序不变且均包含首个字符。
4.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤二中使用Person Hash将获取的字符映射后创建长度为128的数组,其各项初始值为0,然后遍历重新组合的整数,对应数组中下标和该整数相同的项数值+1。
5.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤二中找出数组的四分点后根据四分点对数组中的值进行映射,得到指纹的二进制表示,再将其转换为16进制得到最终的指纹。
6.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤三中指纹匹配时查找到相同值的数据即认为是同源文件,未查询到相同值的数据对该数据进行切断匹配,匹配的段数最多即认为最相似的同源文件。
7.根据权利要求1所述的一种基于字符级局部敏感哈希法进行同源性检测的方法,其特征在于:所述步骤四中对应到相应的成分和版本后得到对应数据成分的对应版本匹配到的文件数,再按照匹配到的文件数对版本进行排序后选定最终版本。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111294922.4A CN113946345A (zh) | 2021-11-03 | 2021-11-03 | 一种基于字符级局部敏感哈希法进行同源性检测的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111294922.4A CN113946345A (zh) | 2021-11-03 | 2021-11-03 | 一种基于字符级局部敏感哈希法进行同源性检测的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113946345A true CN113946345A (zh) | 2022-01-18 |
Family
ID=79337565
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111294922.4A Pending CN113946345A (zh) | 2021-11-03 | 2021-11-03 | 一种基于字符级局部敏感哈希法进行同源性检测的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113946345A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114422389A (zh) * | 2022-02-24 | 2022-04-29 | 成都北中网芯科技有限公司 | 一种基于哈希和硬件加速的高速实时网络数据监测方法 |
-
2021
- 2021-11-03 CN CN202111294922.4A patent/CN113946345A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114422389A (zh) * | 2022-02-24 | 2022-04-29 | 成都北中网芯科技有限公司 | 一种基于哈希和硬件加速的高速实时网络数据监测方法 |
CN114422389B (zh) * | 2022-02-24 | 2023-09-12 | 成都北中网芯科技有限公司 | 一种基于哈希和硬件加速的高速实时网络数据监测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110765458B (zh) | 一种基于深度学习的恶意软件图像格式检测方法及其装置 | |
US10140357B2 (en) | Anomaly, association and clustering detection | |
US8244767B2 (en) | Composite locality sensitive hash based processing of documents | |
US6349296B1 (en) | Method for clustering closely resembling data objects | |
CN108595710B (zh) | 一种快速的海量图片去重方法 | |
CN110851598B (zh) | 文本分类方法、装置、终端设备及存储介质 | |
US10474818B1 (en) | Methods and devices for detection of malware | |
CN112579155B (zh) | 代码相似性检测方法、装置以及存储介质 | |
US8316041B1 (en) | Generation and processing of numerical identifiers | |
CN109492118B (zh) | 一种数据检测方法及检测装置 | |
US20090319506A1 (en) | System and method for efficiently finding email similarity in an email repository | |
US20180143979A1 (en) | Method for segmenting and indexing features from multidimensional data | |
US20230334154A1 (en) | Byte n-gram embedding model | |
WO2018164879A1 (en) | Aggregating procedures for automatic document analysis | |
US20230252140A1 (en) | Methods and systems for identifying anomalous computer events to detect security incidents | |
CN111737966B (zh) | 文档重复度检测方法、装置、设备和可读存储介质 | |
US8495733B1 (en) | Content fingerprinting using context offset sequences | |
CN113946345A (zh) | 一种基于字符级局部敏感哈希法进行同源性检测的方法 | |
Prilepok et al. | Spam detection using data compression and signatures | |
US11755550B2 (en) | System and method for fingerprinting-based conversation threading | |
Uhlig et al. | Combining AI and AM–Improving approximate matching through transformer networks | |
Koga et al. | Effective construction of compression-based feature space | |
CN113691548A (zh) | 一种数据采集和分类存储方法及其系统 | |
Blekanov et al. | Hierarchical clustering of large text datasets using Locality-Sensitive Hashing | |
EP3324303A1 (en) | Method for segmenting and indexing features from multidimensional data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |