[發明專利]一種串匹配代碼相似度檢測方法有效
| 申請號: | 201810612296.0 | 申請日: | 2018-06-13 |
| 公開(公告)號: | CN108920361B | 公開(公告)日: | 2022-04-26 |
| 發明(設計)人: | 薛景;胥超俊;袁博;曹周祥 | 申請(專利權)人: | 南京郵電大學 |
| 主分類號: | G06F11/36 | 分類號: | G06F11/36 |
| 代理公司: | 南京蘇科專利代理有限責任公司 32102 | 代理人: | 姚姣陽 |
| 地址: | 210046 *** | 國省代碼: | 江蘇;32 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 匹配 代碼 相似 檢測 方法 | ||
1.一種串匹配代碼相似度檢測方法,其特征在于:包括如下步驟:
S1:程序代碼預處理
將原始代碼的兩份待比較代碼文件,依據編程語言相關的編譯原理進行預處理,去除提交的代碼中注釋、頭文件、空格或換行符影響代碼特征值提取的冗余信息,并將程序中的變量名和函數名進行標準化處理;
S2:提取特征向量
將經S1步驟預處理后的代碼按語法特征提取出特征向量,特征向量代表代碼的結構特征;
S3:生成特征向量結構指紋
將經S2步驟得到的特征向量與兩份待比較代碼進行按行比較,生成由二進制組成的特征值,0代表本行不包含特征向量值,1代表本行包含特征向量值;
S4:動態生成代碼特征的結構指紋
從兩份待比較代碼中提取相同的特征向量,根據相同的特征向量查找S3步驟中所生成的對應特征向量結構指紋,組成代碼特征的結構指紋;
S5:相似度比較
S51:將兩份待比較代碼中共有的特征向量的代碼特征的結構指紋逐一進行通過最長公共子串匹配的算法求兩份代碼中共有的特征向量之間的代碼特征的結構指紋的相似度,
S52:然后,通過這些特征向量的代碼特征的結構指紋的相似度得到兩份代碼的相似度。
2.根據權利要求1所述的一種串匹配代碼相似度檢測方法,其特征在于:在S1步驟中,讀取給定的待比較的兩份代碼1和代碼2源文件,按照所屬編程語言的語法規則將代碼1和代碼2中的注釋代碼進行去除,然后,對于出現的連續的制表符、換行符進行縮減為一個換行符,將空格刪除,最后,按所屬編程語言的語法規則識別出代碼中的函數名,統一以”func”開頭重命名,識別出代碼中的參數名,統一以”param”開頭重命名。
3.根據權利要求1所述的一種串匹配代碼相似度檢測方法,其特征在于:在S2步驟中,將預處理后的代碼作為輸入,遍歷整段代碼,按照所選語言的語法規則,提取其中的特征向量。
4.根據權利要求1所述的一種串匹配代碼相似度檢測方法,其特征在于:所述S3具體包括如下步驟:
S31:從生成的特征向量中選取一個特征向量;
S31:將該特征向量與待比較的代碼進行按行比較,0代表本行不包含特征向量值,1代表本行包含特征向量值,最終生成由二進制組成的特征值序列;
S33:然后將生成的特征向量結構指紋添加到字典中。
5.根據權利要求1所述的一種串匹配代碼相似度檢測方法,其特征在于:在S51步驟中:首先通過最長字符串匹配的方法找出兩份待比較代碼中的最長公共字符串,通過最長公共字符串將代碼分割成前后兩部分,然后通過遞歸的方法對分割后的前后兩部分進行相同的操作,最后通過公式計算得到代碼特征的結構指紋的相似度,
結構指紋1與結構指紋2的相似度度量公式如下:
其中,|A|和|B|分別為代碼特征的結構指紋A、B所包含的字符數,|A∩B|為代碼特征的結構指紋A、B公共字符串的所含字符數。
6.根據權利要求1所述的一種串匹配代碼相似度檢測方法,其特征在于:在S52步驟中:
兩份代碼的相似度度量公式如下:
其中,x=(x1,x2,x3,…,xn),y=(y1,y2,y3,…yn)表示需檢測的兩份代碼的特征向量,xi×yi表示相同特征向量的代碼特征的結構指紋的相似度。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于南京郵電大學,未經南京郵電大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810612296.0/1.html,轉載請聲明來源鉆瓜專利網。





