小型軟件如何注冊加密

說起軟件的安全問題,我們首先想到的是盜版,如何保護自己的知識產(chǎn)權(quán),防止軟件被盜版就成了每一個軟件開發(fā)者所面臨的首要問題神為此,我們提出了一種隨機多重加密方法,該方法提高了軟件加密的可靠性,為軟件開發(fā)商帶來更大的經(jīng)濟利益,對軟件開發(fā)行業(yè)的良性發(fā)展具有積極的意義。

一、對于小型軟件開發(fā)商選擇加密方分式的分析

市場上極少有人會花費大量時間來破解這類軟件,因此保密措施可以做得相對簡單些,起到一定的保護作用就可以了。為了降低開發(fā)成本,小型軟件的開發(fā)商自然不想投入資金再購買加密軟件為自身軟件加密,因而軟加密方法是他們的最佳選擇。而處于軟件開發(fā)商的位置,他們想要更多地限制用戶對軟件的使用,同時獲得更多的利潤,他們將采取許可證方法。因為許可證加密方法是針對用戶安裝軟件的計算機做文章,當(dāng)用戶將自己的計算機標(biāo)識ID發(fā)送給軟件開發(fā)商,開發(fā)商將其ID進行算法處理后,再將軟件產(chǎn)品序列號返還給用戶M]。而其他的非法用戶想要使用這套軟件,即使復(fù)制或者獲得了軟件的安裝盤,如果沒有獲得開發(fā)商的允許還是不能使用。因為開發(fā)商沒有記錄非法用戶的機器ID號碼,沒有給予他使用的序列號。另外,想要在運行環(huán)境中跳過這一環(huán)節(jié)來運行軟件也是很難做到的,軟件沒有注冊就沒有產(chǎn)生存儲序列號的圖片,進而無法達到啟動軟件的條件。

二、隨機多重加密方法的相關(guān)定義

定義1算法集是隨機多重加密方法當(dāng)中所有的加密算法,記作s;sj代表第j種加密算法;算法集長度是算法集中存在的算法數(shù)量,記作n。

定義2算法序列集是先后隨機產(chǎn)生的算法順序,記作A;ai代表第f重加密算法采用第ai種算法;序列長度是算法序列采用的算法數(shù)量(即加密的重數(shù)),記作m。

三、隨機多重加密方法的實現(xiàn)過程及優(yōu)勢

1、隨機多重加密方法的具體實現(xiàn)過程

為了使用戶不易看出傳送給開發(fā)商的序號是從用戶的本地機器上獲得的機器標(biāo)識,當(dāng)用戶進入注冊界面后,軟件就自動獲得該用戶機器的標(biāo)識ID(MAC網(wǎng)卡地址或CPU序列號),將其利用可逆的加密算法處理后填入軟件序號中,通過電子郵件或電話傳給軟件開發(fā)商,軟件開發(fā)商收到軟件序號后首先把它解密還原為注冊用戶的機器標(biāo)識ID,再將其通過算法進行加密。加密過程如下:

(1)首先,系統(tǒng)隨機生成一個加密序列a1,a2,...am。

(2)然后,找到ai對應(yīng)的加密方法sj,再利用sj對上一階段產(chǎn)生的字符串進行處理,產(chǎn)生的新字符串為下一階段加密做準(zhǔn)備。

(3)當(dāng)該加密序列中的每個加密算法都執(zhí)行了對應(yīng)的加密處理后,將最終產(chǎn)生的字符串同加密序列a1,a2,...am組合成該用戶的軟件注冊序列號,并將該序列號返還給注冊用戶。

當(dāng)用戶收到軟件注冊序列號后,進行注冊,此刻軟件會將序列號拆分為兩部分,一部分為加密后的字符串,另一部分為軟件加密過程中的加密序列訓(xùn)軟件會根據(jù)加密序列對用戶的機器標(biāo)識進行相應(yīng)的加密處理。這樣,處理后產(chǎn)生的結(jié)果一定同前一部分是一致的。再將軟件開發(fā)商授予用戶的完整序號生成圖片保存在注冊表中,并提示注冊成功。

此后,每次運行該軟件的時候,系統(tǒng)都會首先尋找是否存在這個圖片,如果不存在,則通知用戶注冊;如果存在,則將其中的加密序列讀出來,將其分成同樣的兩部分,然后將機器的標(biāo)識按照加密序列進行相應(yīng)的加密操作,再判斷是否與前一部分相同,如果相同,則運行程序,如果錯誤,說明用戶沒有使用指定的注冊機器,軟件拒絕運行。

2、隨機多重加密方法的優(yōu)勢

首先,此種方法運用了軟加密的方式,它的優(yōu)勢是成本低、升級快,具有唯一性和只讀性。它的特點是不需要有輔助硬件,直接在軟件中設(shè)立密碼相關(guān)的方法。該方式是大多數(shù)小型軟件開發(fā)商經(jīng)常使用的方式,因為它是一種低成本的加密方式,并且加密過程是基于注冊用戶的一臺機器的唯一標(biāo)識。這樣,就可以很好地控制軟件的盜版和被互聯(lián)網(wǎng)的用戶任意下載,用戶要想使用該軟件則必須向軟件開發(fā)商支付費用,如果沒有軟件開發(fā)商的允許是萬萬沒法使用的,因為軟件的序列號是由軟件開發(fā)商根據(jù)購買該軟件用戶的注冊機器標(biāo)識來生成的。即使你擁有了一個公司給出的產(chǎn)品注冊序列號,除了指定的注冊機器,其他的任何機器都不能使用該軟件。

其次,該方法既具有多重加密性又具有隨機性。該加密方法中的刀種加密算法,可以運用已經(jīng)成熟的加密算法,如BASE64、MD5等,也可以使用自己編寫的自制算法,也可以兩種算法混合使用。而且,該方法并沒有固定這些加密算法的使用順序,這些算法的順序是隨機產(chǎn)生的,調(diào)用的m次算法中可能并沒有將軟件開發(fā)商提供的所有算法都使用到,也可能m聊次算法中使用的是同一種算法,而這一切是不確定的。由于這種算法相當(dāng)于在nm的組合中選擇一種組合,因此即使購買同一種軟件的用戶獲得的序列號也是很難使用同一種加密組合得來的。對于反編譯軟件來破解該密碼也是沒有規(guī)律可循的,因為算法是隨機的。當(dāng)然,對于同一種軟件使用該方法,必須固定n、m的值,因為客戶端的軟件中也會使用到n和m的值。

另外,該方法具有單向性a隨機多重加密方法利用了單向加密的方式,如果加密算法集中存在像MD5這樣很難找到解密算法的算法或者存在混沌算法,對于破譯者來說想要破解出加密前的原始值將會相當(dāng)困難。

最后,采用了圖片形式存儲軟件序列號的方式。如果將軟件序列號存儲在文件當(dāng)中,當(dāng)文件被查到后很輕松就能讀出該軟件的序列號,而且如果對序列號進行修改,就會影響到軟件的正常運行。相信這種情況是任何軟件開發(fā)商都不想遇到的,因為這樣將會給軟件維護帶來不必要的麻煩。利用該種方式存儲產(chǎn)品的序列號很難讓人知道其中存儲的具體內(nèi)容,并且不易于對其修改,加強了軟件相關(guān)信息的隱藏及保護作用。

四、使用隨機多重加密方法對小型軟件注冊過程加密的實例

1、假設(shè)條件

定義3、BASE64碼是經(jīng)過BASE64算法處理后產(chǎn)生的字符串的值。

定義4、MD5碼是經(jīng)過MD5算法處理后產(chǎn)生的字符串的值。

定義5、自制碼是經(jīng)過自制算法處理后產(chǎn)生的字符串的值。

此實例使用了三種加密算法,BASE64和MD5是兩種比較成熟的算法,還有一種是自己設(shè)計的算法,因此實例中給出n的值為3,同時規(guī)定產(chǎn)生隨機數(shù)的個數(shù)m為5。規(guī)定獲得的本地機的機器標(biāo)識為MAC網(wǎng)卡地址。

2、軟件注冊過程

實例的實現(xiàn)下面是該種方法在小型軟件注冊過程中應(yīng)用的一個實例。假設(shè)軟件第一次運行時獲得的本地機器的MAC網(wǎng)卡地址為00115BD0457E,通過BASE64加密處理后得到BASE64碼:MDAxM TVCRDAON TdF,并將其顯示在軟件注冊界面上,提示用戶通過電子郵件或電話發(fā)送給軟件開發(fā)商。

軟件開發(fā)商利用BASE64解密算法將其解密,還原為注冊用戶的MAC網(wǎng)卡地址。運行產(chǎn)生序列號的程序,隨機產(chǎn)生5個1~3之間的整數(shù),本例中產(chǎn)生的加密序列a1,a2,...am為22132。首先,對MAC網(wǎng)卡地址進行MD5算法處理;然后,再利用MD5算法對產(chǎn)生的MD5碼加密處理,依次執(zhí)行完加密序列中各隨機數(shù)對應(yīng)的加密算法;最后,將產(chǎn)生的字符串和加密序列22132連接構(gòu)成此用戶的最終序列號。此過程產(chǎn)生的相關(guān)算法碼值如圖1所示。

軟件開發(fā)商將最終序列號返還給注冊用戶,注冊用戶將其填入序列號框,執(zhí)行提交操作。軟件會將序列號拆分為加密算法最后產(chǎn)生的字符串和加密序列兩部分。再按照加密序列的順序?qū)AC網(wǎng)卡地址進行相應(yīng)算法的處理,將產(chǎn)生的最終字符串同拆分出的字符串進行比較,如果相同,證明注冊合法,存儲注冊序列號生成的三維碼圖片,同時運行程序;如果不同,提示用戶注冊失敗,停止運行該程序。

3、軟件注冊處理流程

4、相關(guān)代碼

本例中用到mainFrom類、MacAddress類、Base64類、MD5類和addSwape類,還用到了生成二維碼圖片的cre-ateQ Rco de類。由于篇幅有限,下面僅給出體現(xiàn)多重加密方法的主類mainForm類的代碼。

public class mainForm{

public static int createRadomNum(int max){

int s = new Double(max * Math. random()) .intValue0 ;

return s + 1 ;

}

public static void main(String[ ] args) {

String xuhao = MacAddress. getMacAddress0 ;

System. out. println(" MAC = " + xuhao) ;

int i=O;max =3;

String s = " " ;

int random;

random = createRadomNum(max) ;

if (random= =1) {

byte[ ] byt = Base64. enco de (xuhao. getBytes ()) ;

xuhao = new String (byt) ;;

}

else if (random = = 2) xuhao = MD5 . co mpute (xuhao)

else

xuhao = addSwape. Swape(xuhao) ;

s = s +random;

}

System. out.println(xuhao + s) ;

}

}

小知識之軟件加密軟件加密就是用戶在發(fā)送信息前,先調(diào)用信息安全模塊對信息進行加密,然后發(fā)送,到達接收方后,由用戶使用相應(yīng)的解密軟件進行解密并還原。采用軟件加密方式有以下優(yōu)點:已經(jīng)存在標(biāo)準(zhǔn)的安全API(Application Programming Interface,應(yīng)用程序編程接口)產(chǎn)品、實現(xiàn)方便、兼容性好。