CN114153496B - 一种基于区块链的高速可并行代码相似度对比方法和系统 - Google Patents

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

Info

Publication number
CN114153496B
CN114153496B CN202111047253.0A CN202111047253A CN114153496B CN 114153496 B CN114153496 B CN 114153496B CN 202111047253 A CN202111047253 A CN 202111047253A CN 114153496 B CN114153496 B CN 114153496B
Authority
CN
China
Prior art keywords
code
row
classifying
similarity
similarity comparison
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.)
Active
Application number
CN202111047253.0A
Other languages
English (en)
Other versions
CN114153496A (zh
Inventor
蔡维德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianmin Qingdao International Sandbox Research Institute Co ltd
Zeu Crypto Networks Inc
Original Assignee
Tianmin Qingdao International Sandbox Research Institute Co ltd
Zeu Crypto Networks Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tianmin Qingdao International Sandbox Research Institute Co ltd, Zeu Crypto Networks Inc filed Critical Tianmin Qingdao International Sandbox Research Institute Co ltd
Priority to CN202111047253.0A priority Critical patent/CN114153496B/zh
Publication of CN114153496A publication Critical patent/CN114153496A/zh
Application granted granted Critical
Publication of CN114153496B publication Critical patent/CN114153496B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/22Matching criteria, e.g. proximity measures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

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

Description

一种基于区块链的高速可并行代码相似度对比方法和系统
技术领域
本发明属于防算法抄袭、软件防伪技术,软件相似度分析技术领域以及区块链技术领域,具体特别涉及一种基于区块链的高速可并行代码相似度对比方法和系统。
背景技术
计算机领域中有很多编程语言,最常见的C、C++、Java、Go、Python等,每种语言都会有很多从业人员使用,但不管使用哪种语言,源代码都是由字符串形成的,以文件形式存放。为了对比不同项目间的源代码相似度,衍生了很多代码相似度度算法,例如2019年张丹“代码相似性检测方法和工具综述”列举了许多方法,包括基于文本,词法、语义、语法、度量值、机器学习等方法。这些算法各有千秋,由于技术含量不同,实际使用上会有不同的效果,技术含量高的有时操作时反而困难很大。例如有的需要将数据存在数据内,数据库运行比较慢,分析几百个代码就需要1星期左右,耗费时间,而且容易出错,一个小的差异就会造成非常不一致的结果。
现有技术使用的较多的方式是行间对比方式,例如项目A有1万行代码,项目B有1万行代码,如果两个项目有5000行相同的代码,那结果就是项目A与项目B有50%相似。为了躲避这种检测方法的检测,编程人员可以通过修改行,在不影响源代码执行情况下给每个行添加空格等操作,那么行间对比方式就失效了。
如图1所示,项目A和项目B对比,其中有5行是一样的,另外5行由于空格大小写等导致有差异无法识别。但是在源代码情况下“ABC”和“abc”实质上是一样的结果,“a b”中间有一个空格,和“a b”中间有两个空格,但是对计算机系统来说,两个是同样代码。所以需要设计更精细的专用于源代码相似度比较的算法,以识别这些实质上为相同的源代码,获得更好的相似度分析结果,此外该算法应当简单且高速,例如数据结构简单,可以并行处理,一个星期的工作量可以在几分钟完成;并且代码相似度分析需要细粒度分析,由于部分代码可能抄袭A代码,另外一部分抄袭B代码,大部分是原创,而每次抄袭只有一小段,抄袭时候还做了一些小改动,这样粗粒度代码相似度分析就会完全发现不了,使用其他方式也会有困难。
发明内容
本发明为了解决现有技术存在的一项或多项技术问题,提出一种全新的方法和系统,可用于监管单位,代码检验单位,软件开发企业和高校,本发明的高速检测代码相似度的科学验证方法并不是根据文本,词法、语义、语法、机器学习算法的原理。本发明属于度量值算法,但是传统度量值算法抽取代码变量,参数,返回值等。本发明却是使用哈希算法。
使用该算法可以发现一些传统抄袭但是做微量更改的代码,例如在原来代码上加空格,不改变代码逻辑而改变变量名字以及在代码内的位置等;或是从不同源代码抄袭部分代码拼凑,现有技术的代码相似度查验软件对于以上情况无法查出来。
本发明的目的在于提供一种基于区块链的高速可并行代码相似度对比方法,包括:
步骤1,将需要进行多个代码相似度对比的系统分类为多组,每组一个对比系统软件;
步骤2,将所述需要进行代码相似度对比的系统内部的源代码文件再次分类,每一组一个源代码文件;
步骤3,将所述源代码文件进行逐行又一次分类;本实施例中将源代码文件file-0进行逐行分类,获得每一行代码;
步骤4,将所述每一行代码按照不同规则的切分,所述按照不同规则的切分包括按照标点、单词或空格进行切分;
步骤5,提取各个code代码段的哈希值作为特征;
步骤6,以所述系统为单位,对比所述各个code代码段的特征,当所述特征相同的时候,则认为所述code代码段相同;
步骤7,根据相同的所述code代码段的数量获得代码相似度的度量。
优选的,所述步骤4的所述不同规则包括按照空格切分、“,”号切分、“;”号切分以及单词切分。
优选的,所述步骤4还包括将切分后的代码进行统一大写转换。
优选的,所述步骤5可以使用不同哈希算法提取code-c代码段的特征,但是整个过程中只能使用一种算法,不能中间换算法。
优选的,所述哈希算法包括MD4、MD5或SHA哈希算法,或是其他哈希算法。
优选的,所述步骤5采用并发提取特征的方式实施。
优选的,所述并发提取特征包括:
步骤51,启动任务池task pool;
步骤52,所述任务池task pool分配多个子任务task,每一个子任务task负责一个系统sys-n的代码段特征feature提取工作;
步骤53,读取sys-n下全部文件file,计算得出代码段code-n ,提取特征数据feature,将得出的所述系统sys-n的所有特征feature归集并缓存在特征数据集feature-list中。
优选的,所述步骤6采用并行处理方式实施同时进行多个系统源码比较,对所述feature-list内的信息进行并行对比,获取相似度结果。
本发明的目的还在于提供一种基于区块链的高速可并行代码相似度对比系统,包括:
系统分类模块,用于将需要进行代码相似度对比的系统进行分类;
源代码文件分类模块,用于将所述需要进行代码相似度对比的系统内部的源代码文件进行分类;
源代码分类模块,用于将所述源代码文件进行逐行分类;
代码切分模块,用于将所述每一行代码按照不同规则的切分,所述按照不同规则的切分包括按照标点、单词或空格进行切分;
特征提取模块,用于提取各个code代码段的特征;
比较模块,用于以所述系统为单位,对比所述各个code代码段的特征,当所述特征相同的时候,则认为所述code代码段相同;
代码相似度度量模块,用于根据相同的所述code代码段的数量获得代码相似度的度量。
优选的,所述特征提取模块以及所述比较模块分别同时采用并发提取特征和并行比较的方式工作。
本发明的有益效果:
本发明的方法和系统可用于监管单位,代码检验单位,软件开发企业和高校,本发明的高速检测代码相似度的科学验证方法并不是根据文本,词法、语义、语法、机器学习算法的原理,使用该算法可以发现一些传统抄袭但是做微量更改的代码,例如在原来代码上加空格,不改变代码逻辑而改变变量名字以及在代码内的位置等;或是从不同源代码抄袭部分代码拼凑。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
后文将参照附图以示例性而非限制性的方式详细描述本发明的一些具体实施例。附图中相同的附图标记标示了相同或类似的部件或部分。本领域技术人员应该理解,这些附图未必是按比例绘制的。本发明的目标及特征考虑到如下结合附图的描述将更加明显,附图中:
图1为根据现有技术的代码相似度对比算法流程图;
图2为根据本发明的优选实施例的提取特征流程示意图;
图3为根据本发明优选实施例的两个系统源代码对比示意图;
图4为根据本发明的优选实施例的并发提取特征并交叉比较流程示意图。
具体实施方式
为了使得本发明能够针对其发明要点更加明显易懂,下面将结合附图和实例对本发明作进一步的说明。在下面的描述中阐述了很多细节和具体实例,提供这些实例是为了能够更透彻地理解本发明,并且能够将本发明完整形象地传达给本领域的技术人员。虽然本发明能够以很多不同于此描述的其它方式实施,但是本领域技术人员可以在不违背本发明内涵的情况下做相应的推广,因此本发明不受下面公开的具体实例及具体附图所限制。
在下面的描述中阐述了很多细节和具体实例,提供这些实例是为了能够更透彻地理解本发明,并且能够将本发明完整形象地传达给本领域的技术人员。虽然本发明能够以很多不同于此描述的其它方式实施,但是本领域技术人员可以在不违背本发明内涵的情况下做相应的推广,因此本发明不受下面公开的具体实例及具体附图所限制。
如图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代码段的数量获得代码相似度的度量。
作为优选的实施方式,步骤4的不同规则包括按照空格切分、“,”号切分、“;”号切分以及单词切分。
作为优选的实施方式,步骤4还包括将切分后的代码进行统一大写转换。
作为优选的实施方式,步骤5使用哈希算法提取code-c代码段的特征,本实施例提取code-c特征为code-0=a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3。
作为优选的实施方式,哈希算法包括MD4、MD5或SHA哈希算法,但是流程中不能替换算法,整个流程使用同样算法。
作为优选的实施方式,步骤5采用并发提取特征的方式实施。
作为优选的实施方式,并发提取特征包括:
步骤51,启动任务池task pool;
步骤52,任务池task pool分配多个子任务task,每一个子任务task负责一个系统sys-n的代码段特征feature提取工作;
步骤53,读取sys-n下全部文件file,计算得出代码段code-n ,提取特征数据feature,将得出的系统sys-n的所有特征feature归集并缓存在特征数据集feature-list中。
作为优选的实施方式,步骤6采用并行处理方式实施同时进行多个系统源码比较,对feature-list内的信息进行并行对比,获取相似度结果。本实施例中一群包括10个代码,将其分为5组,每组2个系统并行检验。推而广之,一集群具有n个系统,需要(n-1)x (n-2)检验,可以并行处理。
本实施例的基于区块链的高速可并行代码相似度对比系统,包括:
系统分类模块,用于将需要进行代码相似度对比的系统进行分类;本实施例中将所有系统分为系统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代码段的数量获得代码相似度的度量。
作为优选的实施方式,特征提取模块以及比较模块分别同时采用并发提取特征和并行比较的方式工作。
几百个大型软件查询相似度,以前需要1星期的大量计算,现在只要10分钟就可以完成。而且以前粒度大,很多问题查不出来,这里的算法粒度小,可以查到许多相似代码。
虽然本发明已经参考特定的说明性实施例进行了描述,但是不会受到这些实施例的限定而仅仅受到附加权利要求的限定。本领域技术人员应当理解可以在不偏离本发明的保护范围和精神的情况下对本发明的实施例能够进行改动和修改。

Claims (1)

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

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111047253.0A CN114153496B (zh) 2021-09-08 2021-09-08 一种基于区块链的高速可并行代码相似度对比方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111047253.0A CN114153496B (zh) 2021-09-08 2021-09-08 一种基于区块链的高速可并行代码相似度对比方法和系统

Publications (2)

Publication Number Publication Date
CN114153496A CN114153496A (zh) 2022-03-08
CN114153496B true CN114153496B (zh) 2023-09-12

Family

ID=80462345

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111047253.0A Active CN114153496B (zh) 2021-09-08 2021-09-08 一种基于区块链的高速可并行代码相似度对比方法和系统

Country Status (1)

Country Link
CN (1) CN114153496B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116166321B (zh) * 2023-04-26 2023-06-27 浙江鹏信信息科技股份有限公司 代码克隆检测方法、系统及计算机可读存储介质
CN116340185B (zh) * 2023-05-19 2023-09-01 国网数字科技控股有限公司 一种软件开源代码成分分析方法、装置及设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112148359A (zh) * 2020-10-10 2020-12-29 中国人民解放军国防科技大学 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质
CN112949778A (zh) * 2021-04-17 2021-06-11 深圳前海移联科技有限公司 基于局部敏感哈希的智能合约分类方法、系统及电子设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8027879B2 (en) * 2005-11-05 2011-09-27 Jumptap, Inc. Exclusivity bidding for mobile sponsored content
CN111290784B (zh) * 2020-01-21 2021-08-24 北京航空航天大学 适用于大规模样本的程序源代码相似度检测方法
CN112579155B (zh) * 2021-02-23 2021-05-18 北京北大软件工程股份有限公司 代码相似性检测方法、装置以及存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112148359A (zh) * 2020-10-10 2020-12-29 中国人民解放军国防科技大学 一种基于子块过滤的分布式代码克隆检测与搜索方法、系统及介质
CN112949778A (zh) * 2021-04-17 2021-06-11 深圳前海移联科技有限公司 基于局部敏感哈希的智能合约分类方法、系统及电子设备

Also Published As

Publication number Publication date
CN114153496A (zh) 2022-03-08

Similar Documents

Publication Publication Date Title
CN109697162B (zh) 一种基于开源代码库的软件缺陷自动检测方法
US7814111B2 (en) Detection of patterns in data records
US7415171B2 (en) Multigraph optical character reader enhancement systems and methods
US9690788B2 (en) File type recognition analysis method and system
CN114153496B (zh) 一种基于区块链的高速可并行代码相似度对比方法和系统
CN112579155B (zh) 代码相似性检测方法、装置以及存储介质
CN107203468B (zh) 一种基于ast的软件版本演化对比分析方法
RU2613846C2 (ru) Метод и система извлечения данных из изображений слабоструктурированных документов
Singh et al. OCR++: a robust framework for information extraction from scholarly articles
Carrasco An open-source OCR evaluation tool
CN109885641B (zh) 一种数据库中文全文检索的方法及系统
Kettunen et al. Analyzing and improving the quality of a historical news collection using language technology and statistical machine learning methods
CN115062148A (zh) 一种基于数据库的风险控制方法
Neysiani et al. Automatic interconnected lexical typo correction in bug reports of software triage systems
US11361565B2 (en) Natural language processing (NLP) pipeline for automated attribute extraction
CN115203494A (zh) 一种面向文本的时间信息抽取方法及装置
CN110874398B (zh) 违禁词处理方法、装置、电子设备及存储介质
Higashi et al. Hierarchical clustering of OSS license statements toward automatic generation of license rules
JP2014235584A (ja) 文書分析システム、文書分析方法およびプログラム
Banerjee et al. Automatic Creation of Hyperlinks in AEC Documents by Extracting the Sheet Numbers Using LSTM Model
CN115221013B (zh) 一种日志模式的确定方法、装置及设备
Glaser et al. Improving Legal Information Retrieval: Metadata Extraction and Segmentation of German Court Rulings.
Han et al. Type redefinition plagiarism detection of token-based comparison
CN117931275A (zh) 基于机器学习的代码合并冲突自动消解方法
Krutko et al. Automatic Recovery of Corrupted Font Encoding in PDF Documents Using CNN-based Symbol Recognition with Language Model

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
GR01 Patent grant
GR01 Patent grant