国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種軟件代碼存儲(chǔ)方法與流程

      文檔序號(hào):11250677閱讀:358來(lái)源:國(guó)知局

      本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,特別涉及一種軟件代碼存儲(chǔ)方法。



      背景技術(shù):

      當(dāng)前一個(gè)商用軟件代碼編寫(xiě)量非常大,所占用存儲(chǔ)空間也比較大,且某些軟件代碼是否被他人盜用,需要大量文本文件的閱讀或者比對(duì);由此可見(jiàn),針對(duì)軟件代碼的相關(guān)處理時(shí),軟件代碼識(shí)別的難度很大。



      技術(shù)實(shí)現(xiàn)要素:

      有鑒于此,本申請(qǐng)?zhí)峁┮环N軟件代碼存儲(chǔ)方法,不需要對(duì)源軟件代碼文件全部進(jìn)行存儲(chǔ),能夠節(jié)省存儲(chǔ)空間,也能夠降低相似軟件代碼識(shí)別的難度。

      為解決上述技術(shù)問(wèn)題,本申請(qǐng)的技術(shù)方案是這樣實(shí)現(xiàn)的:

      一種軟件代碼存儲(chǔ)方法,該方法包括:

      讀取軟件代碼文件中的軟件代碼;

      按照預(yù)設(shè)規(guī)則對(duì)該軟件代碼的內(nèi)容分塊,形成多個(gè)代碼塊;

      針對(duì)每個(gè)代碼塊對(duì)應(yīng)的內(nèi)容分別進(jìn)行掃描,識(shí)別該代碼塊中的邏輯判斷,以及邏輯判斷嵌套的層次,以各邏輯判斷的層次號(hào)形成一個(gè)數(shù)字序列,作為該代碼塊的特征序列;

      將各代碼塊的名稱(chēng),以及各代碼塊的特征序列,作為該軟件代碼的特征集合進(jìn)行存儲(chǔ)。

      由上面的技術(shù)方案可知,本申請(qǐng)中通過(guò)將一軟件代碼按照預(yù)設(shè)規(guī)則劃分為多個(gè)代碼塊,并針對(duì)每個(gè)代碼塊按照邏輯判斷、邏輯嵌套層次確定代碼塊的特征序列,將各代碼塊的特征序列作為該軟件代碼的特征集進(jìn)行存儲(chǔ),不需要對(duì)源軟件代碼文件全部進(jìn)行存儲(chǔ),能夠節(jié)省存儲(chǔ)空間,也能夠降低相似軟件代碼識(shí)別的難度。

      附圖說(shuō)明

      圖1為本申請(qǐng)實(shí)施例中軟件代碼存儲(chǔ)流程示意圖。

      具體實(shí)施方式

      為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,下面結(jié)合附圖并舉實(shí)施例,對(duì)本發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。

      本申請(qǐng)實(shí)施例中提供一種軟件代碼存儲(chǔ)方法,通過(guò)將一軟件代碼按照預(yù)設(shè)規(guī)則劃分為多個(gè)代碼塊,并針對(duì)每個(gè)代碼塊按照邏輯判斷、邏輯嵌套層次確定代碼塊的特征序列,將各代碼塊的特征序列作為該軟件代碼的特征集進(jìn)行存儲(chǔ),不需要對(duì)源軟件代碼文件全部進(jìn)行存儲(chǔ),能夠節(jié)省存儲(chǔ)空間,也能夠降低相似軟件代碼識(shí)別的難度。

      下面結(jié)合附圖,詳細(xì)說(shuō)明本申請(qǐng)實(shí)施例中實(shí)現(xiàn)軟件代碼存儲(chǔ)的過(guò)程。

      參見(jiàn)圖1,圖1為本申請(qǐng)實(shí)施例中軟件代碼存儲(chǔ)流程示意圖。具體步驟包括:

      步驟101,處理設(shè)備讀取軟件代碼文件中的軟件代碼。

      本申請(qǐng)實(shí)施例中將針對(duì)軟件代碼進(jìn)行特征序列確定的設(shè)備稱(chēng)為處理設(shè)備。

      軟件代碼為高級(jí)計(jì)算機(jī)語(yǔ)言編寫(xiě),如c語(yǔ)言、c++、java、c#、sql、net、php、visualbasic、pascal、python等;

      且該軟件代碼能夠正確編譯,即沒(méi)有語(yǔ)法的錯(cuò)誤,保證需編譯執(zhí)行的代碼能通過(guò)編譯的語(yǔ)法分析階段,腳本代碼在執(zhí)行過(guò)程中可以無(wú)誤完整執(zhí)行。

      步驟102,該處理設(shè)備按照預(yù)設(shè)規(guī)則對(duì)該軟件代碼的內(nèi)容分塊,形成多個(gè)代碼塊。

      本申請(qǐng)實(shí)施例中預(yù)先配置將軟件代碼分塊的預(yù)設(shè)規(guī)則,針對(duì)面向過(guò)程的軟件代碼,預(yù)設(shè)規(guī)則為以函數(shù)為顆粒劃分代碼塊,即一個(gè)函數(shù)劃分為一個(gè)代碼塊;

      若軟件代碼為面向過(guò)程的代碼,則按照代碼里的函數(shù)對(duì)該軟件代碼的內(nèi)容進(jìn)行分塊,以函數(shù)的名稱(chēng)作為對(duì)應(yīng)代碼塊的名稱(chēng);針對(duì)不屬于任何函數(shù)中的語(yǔ)句,作為一個(gè)獨(dú)立主函數(shù)劃分為一個(gè)代碼塊。

      針對(duì)面向?qū)ο蟮能浖a,預(yù)設(shè)規(guī)則為以對(duì)象內(nèi)的方法劃分代碼塊。

      若軟件代碼為面向?qū)ο蟮拇a,則按照代碼里的對(duì)象內(nèi)的方法對(duì)該軟件代碼的內(nèi)容進(jìn)行分塊,以對(duì)象和對(duì)應(yīng)方法的名稱(chēng)作為對(duì)應(yīng)代碼塊的名稱(chēng);針對(duì)不屬于任何對(duì)象內(nèi)的語(yǔ)句,作為一個(gè)獨(dú)立方法劃分為一個(gè)代碼塊。

      以面向?qū)ο蟮能浖a為例,先按對(duì)象劃分,一個(gè)對(duì)象中有幾個(gè)方法則針對(duì)該對(duì)象劃分為幾個(gè)代碼塊,如一個(gè)軟件代碼包括3個(gè)對(duì)象,第1個(gè)對(duì)象內(nèi)有2個(gè)方法,第2個(gè)對(duì)象內(nèi)有3個(gè)方法,第3個(gè)對(duì)象內(nèi)有1個(gè)方法,則該軟件代碼劃分為6個(gè)代碼塊。

      步驟103,該處理設(shè)備針對(duì)每個(gè)代碼塊對(duì)應(yīng)的內(nèi)容分別進(jìn)行掃描,識(shí)別該代碼塊中的邏輯判斷,以及邏輯判斷嵌套的層次,以各邏輯判斷的層次號(hào)形成一個(gè)數(shù)字序列,作為該代碼塊的特征序列。

      本步驟中針對(duì)每個(gè)代碼塊對(duì)應(yīng)的內(nèi)容分別進(jìn)行掃描,識(shí)別該代碼塊中的邏輯判斷,以及邏輯判斷嵌套的層次,以各邏輯判斷的層次號(hào)形成一個(gè)數(shù)字序列,包括:

      針對(duì)該代碼塊設(shè)置邏輯嵌套計(jì)數(shù)器初始值為0;

      掃描該代碼塊,若掃描到代碼塊中存在邏輯判斷詞,則將邏輯嵌套計(jì)數(shù)器增加1,并記錄;

      若在滿(mǎn)足邏輯判斷而執(zhí)行的代碼中又有新的邏輯判斷,則邏輯嵌套計(jì)數(shù)器加1,并記錄;

      當(dāng)代碼完成一個(gè)滿(mǎn)足邏輯判斷的執(zhí)行過(guò)程,邏輯嵌套計(jì)數(shù)器減1,不記錄;以此類(lèi)推,直到掃描完該代碼塊的全部?jī)?nèi)容。

      這里的邏輯判斷詞如:if、else、for、while、do、switch等,針對(duì)不同的編程語(yǔ)言,根據(jù)具體編程語(yǔ)言確定邏輯判斷詞,判斷一個(gè)邏輯判斷的結(jié)束。

      針對(duì)每個(gè)代碼塊執(zhí)行上述操作,當(dāng)所有代碼塊掃描結(jié)束時(shí),完成整個(gè)軟件代碼的特征集的生成。

      步驟104,該處理設(shè)備將各代碼塊的名稱(chēng),以及各代碼塊的特征序列,作為該軟件代碼的特征集。

      本申請(qǐng)具體實(shí)現(xiàn)時(shí),可以json格式生成并存儲(chǔ)軟件代碼的特征集。但是不限于此格式,如還可以使用xml,html等格式進(jìn)行存儲(chǔ)。

      在存儲(chǔ)軟件代碼的特征集時(shí),存儲(chǔ)附加信息;其中,所述附加信息包括下述一項(xiàng)或任意項(xiàng)組合:軟件版本、特征集生成時(shí)間、特征集對(duì)應(yīng)的哈希值、數(shù)字簽名、軟件編寫(xiě)者名稱(chēng)、軟件備注和說(shuō)明;所述哈希值和數(shù)字簽名用于軟件代碼的特征集唯一性的標(biāo)識(shí)。

      存儲(chǔ)的附加信息可以由處理設(shè)備的使用者根據(jù)實(shí)際應(yīng)用確定,不限于上述列出軟件版本、特征集生成時(shí)間、特征集對(duì)應(yīng)的哈希值、數(shù)字簽名、軟件編寫(xiě)者名稱(chēng)、軟件備注、說(shuō)明等信息。

      下面結(jié)合具體實(shí)例,詳細(xì)說(shuō)明特征序列的生成方式。

      實(shí)施例一

      以面向過(guò)程的,c語(yǔ)言軟件代碼為例。

      參見(jiàn)表1,表1為面向過(guò)程的軟件代碼特征集包含的內(nèi)容。

      表1

      表1中以軟件代碼example.c為例;由于該軟件代碼中包括兩個(gè)函數(shù),一個(gè)為a函數(shù),一個(gè)為不在任何函數(shù)中的語(yǔ)句,作為main函數(shù);因此,將該軟件代碼劃分為兩個(gè)代碼塊,名稱(chēng)分別為a和main。

      針對(duì)代碼塊a進(jìn)行掃描,根據(jù)邏輯嵌套次序生成代碼塊a的特征序列為:1,2,3,3,1。

      針對(duì)代碼塊main進(jìn)行掃描,根據(jù)邏輯嵌套次序生成main代碼塊的特征序列1,2,2

      以json格式生成代碼塊a的特征序列{“a”:[1,2,3,3,1]}

      以json格式生成代碼塊main的特征序列{“main”:[1,2,2]}

      生成附加信息:“version”:“1.0”,“timestamp”:“2017-04-1416:49:20”

      以json格式生成軟件代碼文件的特征集:{“example.c”:[{“a”:[1,2,3,3,1]},{“main”:[1,2,2]}],“version”:“1.0”,“timestamp”:“2017-04-1416:49:20”}。

      實(shí)施例二

      以面向?qū)ο蟮?,python語(yǔ)言軟件代碼為例。

      參見(jiàn)表2,表2為本申請(qǐng)實(shí)施例中面向?qū)ο蟮能浖a的特征集包含的內(nèi)容。

      表2

      表2中以軟件代碼example.py為例,由于該軟件代碼中存在兩個(gè)對(duì)象和不在對(duì)象中的可執(zhí)行語(yǔ)句,其中一個(gè)對(duì)象中包括一個(gè)方法,另外一個(gè)對(duì)象中包括2個(gè)方法,因此,將該軟件代碼劃分為4個(gè)代碼塊分別為:代碼塊a,代碼塊b.get,代碼塊b.post,代碼塊main,所有不在對(duì)象中的可執(zhí)行語(yǔ)句,放入代碼塊main中。

      針對(duì)代碼塊a進(jìn)行掃描,根據(jù)邏輯嵌套次序生成代碼塊a的特征序列[1,1,1]。

      針對(duì)代碼塊b.get進(jìn)行掃描,根據(jù)邏輯嵌套次序生成代碼塊b.get的特征序列[1,1,1,1,2,2,1,2,2,3,3,2]。

      針對(duì)代碼塊b.post進(jìn)行掃描,根據(jù)邏輯嵌套次序生成代碼塊b.post的特征序列[0]。

      針對(duì)代碼塊main進(jìn)行掃描,根據(jù)邏輯嵌套次序生成代碼塊main的特征序列[1,1,1]。

      生成附加信息如“version”:“1.0”,“timestamp”:“2017-04-1416:49:20”等

      生成軟件代碼example.py的特征集{"example.py":[{"a":[1,1,1]},{"b":[{"get":[1,1,1,1,2,2,1,2,2,3,3,2]},{"post":[0]}]},{"main":[1,1,1]}],"version":"1.0","timestamp":"2017-04-1416:49:20"}。

      本申請(qǐng)?zhí)崛≤浖a的特征序列的方案還可以應(yīng)用到軟件是否相同的確定中,具體如下:

      第一步、當(dāng)需要確定第一軟件代碼與存儲(chǔ)的軟件代碼是否相同時(shí),確定第一軟件代碼的特征集,并確定第一軟件代碼的特征集中的每一特征序列與存儲(chǔ)的軟件代碼的特征集中每一特征序列的相似度;

      在需要確定兩個(gè)軟件代碼是否相同時(shí),本申請(qǐng)實(shí)施例中給出的具體實(shí)現(xiàn)方案中不直接比對(duì)軟件代碼文件中的軟件代碼,而是先比較特征集,如果特征集相識(shí)度滿(mǎn)足預(yù)設(shè)的條件,才會(huì)進(jìn)行源代碼的比對(duì);否則,直接認(rèn)為不同,不再使用源代碼進(jìn)行比較,這樣能夠節(jié)省大量的代碼比對(duì)工作量。

      在進(jìn)行特征集比較時(shí),使用兩兩組合的比較方式,即從第一軟件代碼合存儲(chǔ)的軟件代碼的特征集中分別取出一個(gè)代碼塊的特征序列集,一一進(jìn)行對(duì)比。如第一軟件代碼具備4個(gè)代碼塊,存儲(chǔ)的軟件代碼具備4個(gè)代碼塊,則需要進(jìn)行16組比對(duì)。

      第二步,若第一軟件代碼有特征序列和存儲(chǔ)的軟件代碼的特征集中一特征序列相似度大于預(yù)設(shè)相識(shí)度值,則確定第一軟件代碼中對(duì)應(yīng)代碼塊與存儲(chǔ)的軟件代碼中對(duì)應(yīng)代碼塊有相同特征;否則,確定對(duì)應(yīng)代碼塊的特征不同。

      第三步,若第一軟件代碼和存儲(chǔ)軟件代碼有相同特征的代碼塊數(shù)目大于預(yù)設(shè)相同數(shù)目值,則通過(guò)對(duì)第一軟件代碼文件和存儲(chǔ)的軟件代碼源文件中的軟件代碼進(jìn)行比較,確定第一軟件代碼與存儲(chǔ)的軟件代碼是否相同;否則,不需要進(jìn)行源代碼比較,則確認(rèn)第一軟件代碼和存儲(chǔ)的軟件代碼不同。

      在具體實(shí)現(xiàn)時(shí),還可以使用上述方法直接確定兩個(gè)存儲(chǔ)的軟件代碼是否相同;確定兩個(gè)均未進(jìn)行特征提取的軟件代碼是否相同。

      具體實(shí)現(xiàn)時(shí),可以先比較代碼塊個(gè)數(shù)是否相近、代碼塊命名是否相似,把命名相似代碼塊進(jìn)行相似性比較,比較方法如統(tǒng)計(jì)學(xué)里的兩數(shù)字序列的相關(guān)性計(jì)算,以檢查是否存在數(shù)學(xué)高相關(guān)性的特征序列。也可第一軟件代碼的全部特征序列和受保護(hù)的軟件代碼特征集中的全部特征序更進(jìn)行兩兩比較,比較方法如統(tǒng)計(jì)學(xué)里的兩數(shù)字序列的相關(guān)性計(jì)算,看是否存在數(shù)學(xué)高相關(guān)性的特征序列。本申請(qǐng)實(shí)施例對(duì)使用特征集進(jìn)行比較的規(guī)則不做限制。

      本申請(qǐng)實(shí)施例中可以把軟件代碼特征集進(jìn)行存儲(chǔ)過(guò)程作為該軟件代碼文件受到保護(hù)的標(biāo)志;通過(guò)使用軟件代碼的特征集進(jìn)行相識(shí)度比較,來(lái)確定受保護(hù)的軟件代碼是否受到侵害。

      本申請(qǐng)實(shí)施例中將對(duì)軟件代碼的比對(duì),簡(jiǎn)化為特征集相似性的比對(duì),降低了軟件代碼的識(shí)別難度。

      綜上所述,本申請(qǐng)通過(guò)將一軟件代碼按照預(yù)設(shè)規(guī)則劃分為多個(gè)代碼塊,并針對(duì)每個(gè)代碼塊按照邏輯判斷、邏輯嵌套層次確定代碼塊的特征序列,將各代碼塊的特征序列作為該軟件代碼的特征集進(jìn)行存儲(chǔ),不需要對(duì)源軟件代碼文件全部進(jìn)行存儲(chǔ),能夠節(jié)省存儲(chǔ)空間,也能夠降低相似軟件代碼識(shí)別的難度。

      以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。

      當(dāng)前第1頁(yè)1 2 
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1