一种基于区块链的高速可并行代码相似度对比方法和系统与流程

专利查询2024-1-4  107



1.本发明属于防算法抄袭、软件防伪技术,软件相似度分析技术领域以及区块链技术领域,具体特别涉及一种基于区块链的高速可并行代码相似度对比方法和系统。


背景技术:

2.计算机领域中有很多编程语言,最常见的c、c++、java、go、python等,每种语言都会有很多从业人员使用,但不管使用哪种语言,源代码都是由字符串形成的,以文件形式存放。为了对比不同项目间的源代码相似度,衍生了很多代码相似度度算法,例如2019年张丹“代码相似性检测方法和工具综述”列举了许多方法,包括基于文本,词法、语义、语法、度量值、机器学习等方法。这些算法各有千秋,由于技术含量不同,实际使用上会有不同的效果,技术含量高的有时操作时反而困难很大。例如有的需要将数据存在数据内,数据库运行比较慢,分析几百个代码就需要1星期左右,耗费时间,而且容易出错,一个小的差异就会造成非常不一致的结果。
3.现有技术使用的较多的方式是行间对比方式,例如项目a有1万行代码,项目b有1万行代码,如果两个项目有5000行相同的代码,那结果就是项目a与项目b有50%相似。为了躲避这种检测方法的检测,编程人员可以通过修改行,在不影响源代码执行情况下给每个行添加空格等操作,那么行间对比方式就失效了。
4.如图1所示,项目a和项目b对比,其中有5行是一样的,另外5行由于空格大小写等导致有差异无法识别。但是在源代码情况下“abc”和“abc”实质上是一样的结果,“a b”中间有一个空格,和“ab”中间有两个空格,但是对计算机系统来说,两个是同样代码。所以需要设计更精细的专用于源代码相似度比较的算法,以识别这些实质上为相同的源代码,获得更好的相似度分析结果,此外该算法应当简单且高速,例如数据结构简单,可以并行处理,一个星期的工作量可以在几分钟完成;并且代码相似度分析需要细粒度分析,由于部分代码可能抄袭a代码,另外一部分抄袭b代码,大部分是原创,而每次抄袭只有一小段,抄袭时候还做了一些小改动,这样粗粒度代码相似度分析就会完全发现不了,使用其他方式也会有困难。


技术实现要素:

5.本发明为了解决现有技术存在的一项或多项技术问题,提出一种全新的方法和系统,可用于监管单位,代码检验单位,软件开发企业和高校,本发明的高速检测代码相似度的科学验证方法并不是根据文本,词法、语义、语法、机器学习算法的原理。本发明属于度量值算法,但是传统度量值算法抽取代码变量,参数,返回值等。本发明却是使用哈希算法。
6.使用该算法可以发现一些传统抄袭但是做微量更改的代码,例如在原来代码上加空格,不改变代码逻辑而改变变量名字以及在代码内的位置等;或是从不同源代码抄袭部分代码拼凑,现有技术的代码相似度查验软件对于以上情况无法查出来。
7.本发明的目的在于提供一种基于区块链的高速可并行代码相似度对比方法,包
括:步骤1,将需要进行多个代码相似度对比的系统分类为多组,每组一个对比系统软件;步骤2,将所述需要进行代码相似度对比的系统内部的源代码文件再次分类,每一组一个源代码文件;步骤3,将所述源代码文件进行逐行又一次分类;本实施例中将源代码文件file-0进行逐行分类,获得每一行代码;步骤4,将所述每一行代码按照不同规则的切分,所述按照不同规则的切分包括按照标点、单词或空格进行切分;步骤5,提取各个code代码段的哈希值作为特征;步骤6,以所述系统为单位,对比所述各个code代码段的特征,当所述特征相同的时候,则认为所述code代码段相同;步骤7,根据相同的所述code代码段的数量获得代码相似度的度量。
8.优选的,所述步骤4的所述不同规则包括按照空格切分、“,”号切分、“;”号切分以及单词切分。
9.优选的,所述步骤4还包括将切分后的代码进行统一大写转换。
10.优选的,所述步骤5可以使用不同哈希算法提取code-c代码段的特征,但是整个过程中只能使用一种算法,不能中间换算法。
11.优选的,所述哈希算法包括md4、md5或sha哈希算法,或是其他哈希算法。
12.优选的,所述步骤5采用并发提取特征的方式实施。
13.优选的,所述并发提取特征包括:步骤51,启动任务池task pool;步骤52,所述任务池task pool分配多个子任务task,每一个子任务task负责一个系统sys-n的代码段特征feature提取工作;步骤53,读取sys-n下全部文件file,计算得出代码段code-n ,提取特征数据feature,将得出的所述系统sys-n的所有特征feature归集并缓存在特征数据集feature-list中。
14.优选的,所述步骤6采用并行处理方式实施同时进行多个系统源码比较,对所述feature-list内的信息进行并行对比,获取相似度结果。
15.本发明的目的还在于提供一种基于区块链的高速可并行代码相似度对比系统,包括:系统分类模块,用于将需要进行代码相似度对比的系统进行分类;源代码文件分类模块,用于将所述需要进行代码相似度对比的系统内部的源代码文件进行分类;源代码分类模块,用于将所述源代码文件进行逐行分类;代码切分模块,用于将所述每一行代码按照不同规则的切分,所述按照不同规则的切分包括按照标点、单词或空格进行切分;特征提取模块,用于提取各个code代码段的特征;比较模块,用于以所述系统为单位,对比所述各个code代码段的特征,当所述特征
相同的时候,则认为所述code代码段相同;代码相似度度量模块,用于根据相同的所述code代码段的数量获得代码相似度的度量。
16.优选的,所述特征提取模块以及所述比较模块分别同时采用并发提取特征和并行比较的方式工作。
17.本发明的有益效果:本发明的方法和系统可用于监管单位,代码检验单位,软件开发企业和高校,本发明的高速检测代码相似度的科学验证方法并不是根据文本,词法、语义、语法、机器学习算法的原理,使用该算法可以发现一些传统抄袭但是做微量更改的代码,例如在原来代码上加空格,不改变代码逻辑而改变变量名字以及在代码内的位置等;或是从不同源代码抄袭部分代码拼凑。
18.根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
19.后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。本发明的目标及特征考虑到如下结合附图的描述将更加明显,附图中:图1为根据现有技术的代码相似度对比算法流程图;图2为根据本发明的优选实施例的提取特征流程示意图;图3为根据本发明优选实施例的两个系统源代码对比示意图;图4为根据本发明的优选实施例的并发提取特征并交叉比较流程示意图。
具体实施方式
20.为了使得本发明能够针对其发明要点更加明显易懂,下面将结合附图和实例对本发明作进一步的说明。在下面的描述中阐述了很多细节和具体实例,提供这些实例是为了能够更透彻地理解本发明,并且能够将本发明完整形象地传达给本领域的技术人员。虽然本发明能够以很多不同于此描述的其它方式实施,但是本领域技术人员可以在不违背本发明内涵的情况下做相应的推广,因此本发明不受下面公开的具体实例及具体附图所限制。
21.在下面的描述中阐述了很多细节和具体实例,提供这些实例是为了能够更透彻地理解本发明,并且能够将本发明完整形象地传达给本领域的技术人员。虽然本发明能够以很多不同于此描述的其它方式实施,但是本领域技术人员可以在不违背本发明内涵的情况下做相应的推广,因此本发明不受下面公开的具体实例及具体附图所限制。
22.如图2-3所示,本实施例的基于区块链的高速可并行代码相似度对比方法,包括:步骤1,将需要进行代码相似度对比的系统进行分类;本实施例中将所有系统分为系统a和系统b,分别用sys-0和sys-1来表示;步骤2,将需要进行代码相似度对比的系统内部的源代码文件进行分类;本实施例中系统sys-0中所有源代码文件使用file-0、file-1到file-f表示;
步骤3,将源代码文件进行逐行分类;本实施例中将源代码文件file-0进行逐行分类,获得每一行代码,采用line-0、line-1到line-l表示;步骤4,将每一行代码按照不同规则的切分,按照不同规则的切分包括按照标点、单词或空格进行切分;本实施例中包括将代码行line-0按照不同规则切分后得到code-0,code-1...code-c代码段;步骤5,提取各个code代码段的哈希值为特征;步骤6,以系统为单位,对比各个code代码段的特征,当特征相同的时候,则认为code代码段相同;步骤7,根据相同的code代码段的数量获得代码相似度的度量。
23.作为优选的实施方式,步骤4的不同规则包括按照空格切分、“,”号切分、“;”号切分以及单词切分。
24.作为优选的实施方式,步骤4还包括将切分后的代码进行统一大写转换。
25.作为优选的实施方式,步骤5使用哈希算法提取code-c代码段的特征,本实施例提取code-c特征为code-0=a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3。
26.作为优选的实施方式,哈希算法包括md4、md5或sha哈希算法,但是流程中不能替换算法,整个流程使用同样算法。
27.作为优选的实施方式,步骤5采用并发提取特征的方式实施。
28.作为优选的实施方式,并发提取特征包括:步骤51,启动任务池task pool;步骤52,任务池task pool分配多个子任务task,每一个子任务task负责一个系统sys-n的代码段特征feature提取工作;步骤53,读取sys-n下全部文件file,计算得出代码段code-n ,提取特征数据feature,将得出的系统sys-n的所有特征feature归集并缓存在特征数据集feature-list中。
29.作为优选的实施方式,步骤6采用并行处理方式实施同时进行多个系统源码比较,对feature-list内的信息进行并行对比,获取相似度结果。本实施例中一群包括10个代码,将其分为5组,每组2个系统并行检验。推而广之,一集群具有n个系统,需要(n-1)x (n-2)检验,可以并行处理。
30.本实施例的基于区块链的高速可并行代码相似度对比系统,包括:系统分类模块,用于将需要进行代码相似度对比的系统进行分类;本实施例中将所有系统分为系统a和系统b,分别用sys-0和sys-1来表示;源代码文件分类模块,用于将需要进行代码相似度对比的系统内部的源代码文件进行分类;本实施例中系统sys-0中所有源代码文件使用file-0、file-1到file-f表示;源代码分类模块,用于将源代码文件进行逐行分类;本实施例中将源代码文件file-0进行逐行分类,获得每一行代码,采用line-0、line-1到line-l表示;代码切分模块,用于将每一行代码按照不同规则的切分,按照不同规则的切分包括按照标点、单词或空格进行切分;本实施例中包括将代码行line-0按照不同规则切分后得到code-0,code-1...code-c代码段;
特征提取模块,用于提取各个code代码段的特征;比较模块,用于以系统为单位,对比各个code代码段的特征,当特征相同的时候,则认为code代码段相同;代码相似度度量模块,用于根据相同的code代码段的数量获得代码相似度的度量。
31.作为优选的实施方式,特征提取模块以及比较模块分别同时采用并发提取特征和并行比较的方式工作。
32.几百个大型软件查询相似度,以前需要1星期的大量计算,现在只要10分钟就可以完成。而且以前粒度大,很多问题查不出来,这里的算法粒度小,可以查到许多相似代码。
33.虽然本发明已经参考特定的说明性实施例进行了描述,但是不会受到这些实施例的限定而仅仅受到附加权利要求的限定。本领域技术人员应当理解可以在不偏离本发明的保护范围和精神的情况下对本发明的实施例能够进行改动和修改。

技术特征:
1.一种基于区块链的高速可并行代码相似度对比方法,其特征在于包括:步骤1,将需要进行多个代码相似度对比的系统进行分类为多组,每组一个对比系统软件;步骤2,将所述需要进行代码相似度对比的系统内部的源代码文件再次分类,每一组一个源代码文件;步骤3,将所述源代码文件进行逐行又一次分类;步骤4,将所述每一行代码按照不同规则的切分,所述按照不同规则的切分包括按照标点、单词或空格进行切分;步骤5,提取各个code代码段的哈希值为特征;步骤6,以所述系统为单位,对比所述各个code代码段的特征,当所述特征相同的时候,则认为所述code代码段相同;步骤7,根据相同的所述code代码段的数量获得代码相似度的度量。2.根据权利要求1所述的一种基于区块链的高速可并行代码相似度对比方法,其特征在于:所述步骤4的所述不同规则包括按照空格切分、“,”号切分、“;”号切分以及单词切分。3.根据权利要求2所述的一种基于区块链的高速可并行代码相似度对比方法,其特征在于:所述步骤4还包括将切分后的代码进行统一大写转换。4.根据权利要求1所述的一种基于区块链的高速可并行代码相似度对比方法,其特征在于:所述步骤5使用哈希算法提取code-c代码段的特征。5.根据权利要求4所述的一种基于区块链的高速可并行代码相似度对比方法,其特征在于:所述哈希算法包括md4、md5或sha哈希算法,或是其他哈希算法。6.根据权利要求1所述的一种基于区块链的高速可并行代码相似度对比方法,其特征在于:所述步骤5采用并发提取特征的方式实施。7.根据权利要求6所述的一种基于区块链的高速可并行代码相似度对比方法,其特征在于:所述并发提取特征包括:步骤51,启动任务池task pool;步骤52,所述任务池task pool分配多个子任务task,每一个子任务task负责一个系统sys-n的代码段特征feature提取工作;步骤53,读取sys-n下全部文件file,计算得出代码段code-n ,提取特征数据feature,将得出的所述系统sys-n的所有特征feature归集并缓存在特征数据集feature-list中。8.根据权利要求7所述的一种基于区块链的高速可并行代码相似度对比方法,其特征在于:所述步骤6采用并行处理方式实施同时进行多个系统源码比较,对所述feature-list内的信息进行并行对比,获取相似度结果。9.一种基于区块链的高速可并行代码相似度对比系统,其特征在于包括:系统分类模块,用于将需要进行代码相似度对比的系统进行分类;源代码文件分类模块,用于将所述需要进行代码相似度对比的系统内部的源代码文件进行分类;源代码分类模块,用于将所述源代码文件进行逐行分类;代码切分模块,用于将所述每一行代码按照不同规则的切分,所述按照不同规则的切分包括按照标点、单词或空格进行切分;
特征提取模块,用于提取各个code代码段的特征;比较模块,用于以所述系统为单位,对比所述各个code代码段的特征,当所述特征相同的时候,则认为所述code代码段相同;代码相似度度量模块,用于根据相同的所述code代码段的数量获得代码相似度的度量。10.根据权利要求9所述的一种基于区块链的高速可并行代码相似度对比系统,其特征在于:所述特征提取模块以及所述比较模块分别同时采用并发提取特征和并行比较的方式工作。

技术总结
本发明提供一种基于区块链的高速可并行代码相似度对比方法,包括:步骤1,将需要进行代码相似度对比的系统进行分类;步骤2,将需要进行代码相似度对比的系统内部的源代码文件进行分类;步骤3,将源代码文件进行逐行分类;步骤4,将每一行代码按照不同规则的切分,按照不同规则的切分包括按照标点、单词或空格进行切分;步骤5,提取各个code代码段的特征;步骤6,以系统为单位,对比各个code代码段的特征,当特征相同的时候,则认为code代码段相同;步骤7,根据相同的code代码段的数量获得代码相似度的度量。还提供一种基于区块链的高速可并行代码相似度对比系统。行代码相似度对比系统。行代码相似度对比系统。


技术研发人员:蔡维德
受保护的技术使用者:天民(青岛)国际沙盒研究院有限公司
技术研发日:2021.09.08
技术公布日:2022/3/8

最新回复(0)