说起软件的安全问题,我们首先想到的是盗版,如何保护自己的知识产权,防止软件被盗版就成了每一个软件开发者所面临的首要问题神为此,我们提出了一种随机多重加密方法,该方法提高了软件加密的可靠性,为软件开发商带来更大的经济利益,对软件开发行业的良性发展具有积极的意义。

一、对于小型软件开发商选择加密方分式的分析

市场上极少有人会花费大量时间来破解这类软件,因此保密措施可以做得相对简单些,起到一定的保护作用就可以了。为了降低开发成本,小型软件的开发商自然不想投入资金再购买加密软件为自身软件加密,因而软加密方法是他们的最佳选择。而处于软件开发商的位置,他们想要更多地限制用户对软件的使用,同时获得更多的利润,他们将采取许可证方法。因为许可证加密方法是针对用户安装软件的计算机做文章,当用户将自己的计算机标识ID发送给软件开发商,开发商将其ID进行算法处理后,再将软件产品序列号返还给用户M]。而其他的非法用户想要使用这套软件,即使复制或者获得了软件的安装盘,如果没有获得开发商的允许还是不能使用。因为开发商没有记录非法用户的机器ID号码,没有给予他使用的序列号。另外,想要在运行环境中跳过这一环节来运行软件也是很难做到的,软件没有注册就没有产生存储序列号的图片,进而无法达到启动软件的条件。

二、随机多重加密方法的相关定义

定义1算法集是随机多重加密方法当中所有的加密算法,记作s;sj代表第j种加密算法;算法集长度是算法集中存在的算法数量,记作n。

定义2算法序列集是先后随机产生的算法顺序,记作A;ai代表第f重加密算法采用第ai种算法;序列长度是算法序列采用的算法数量(即加密的重数),记作m。

三、随机多重加密方法的实现过程及优势

1、随机多重加密方法的具体实现过程

为了使用户不易看出传送给开发商的序号是从用户的本地机器上获得的机器标识,当用户进入注册界面后,软件就自动获得该用户机器的标识ID(MAC网卡地址或CPU序列号),将其利用可逆的加密算法处理后填入软件序号中,通过电子邮件或电话传给软件开发商,软件开发商收到软件序号后首先把它解密还原为注册用户的机器标识ID,再将其通过算法进行加密。加密过程如下:

(1)首先,系统随机生成一个加密序列a1,a2,...am。

(2)然后,找到ai对应的加密方法sj,再利用sj对上一阶段产生的字符串进行处理,产生的新字符串为下一阶段加密做准备。

(3)当该加密序列中的每个加密算法都执行了对应的加密处理后,将最终产生的字符串同加密序列a1,a2,...am组合成该用户的软件注册序列号,并将该序列号返还给注册用户。

当用户收到软件注册序列号后,进行注册,此刻软件会将序列号拆分为两部分,一部分为加密后的字符串,另一部分为软件加密过程中的加密序列训软件会根据加密序列对用户的机器标识进行相应的加密处理。这样,处理后产生的结果一定同前一部分是一致的。再将软件开发商授予用户的完整序号生成图片保存在注册表中,并提示注册成功。

此后,每次运行该软件的时候,系统都会首先寻找是否存在这个图片,如果不存在,则通知用户注册;如果存在,则将其中的加密序列读出来,将其分成同样的两部分,然后将机器的标识按照加密序列进行相应的加密操作,再判断是否与前一部分相同,如果相同,则运行程序,如果错误,说明用户没有使用指定的注册机器,软件拒绝运行。

2、随机多重加密方法的优势

首先,此种方法运用了软加密的方式,它的优势是成本低、升级快,具有唯一性和只读性。它的特点是不需要有辅助硬件,直接在软件中设立密码相关的方法。该方式是大多数小型软件开发商经常使用的方式,因为它是一种低成本的加密方式,并且加密过程是基于注册用户的一台机器的唯一标识。这样,就可以很好地控制软件的盗版和被互联网的用户任意下载,用户要想使用该软件则必须向软件开发商支付费用,如果没有软件开发商的允许是万万没法使用的,因为软件的序列号是由软件开发商根据购买该软件用户的注册机器标识来生成的。即使你拥有了一个公司给出的产品注册序列号,除了指定的注册机器,其他的任何机器都不能使用该软件。

其次,该方法既具有多重加密性又具有随机性。该加密方法中的刀种加密算法,可以运用已经成熟的加密算法,如BASE64、MD5等,也可以使用自己编写的自制算法,也可以两种算法混合使用。而且,该方法并没有固定这些加密算法的使用顺序,这些算法的顺序是随机产生的,调用的m次算法中可能并没有将软件开发商提供的所有算法都使用到,也可能m聊次算法中使用的是同一种算法,而这一切是不确定的。由于这种算法相当于在nm的组合中选择一种组合,因此即使购买同一种软件的用户获得的序列号也是很难使用同一种加密组合得来的。对于反编译软件来破解该密码也是没有规律可循的,因为算法是随机的。当然,对于同一种软件使用该方法,必须固定n、m的值,因为客户端的软件中也会使用到n和m的值。

另外,该方法具有单向性a随机多重加密方法利用了单向加密的方式,如果加密算法集中存在像MD5这样很难找到解密算法的算法或者存在混沌算法,对于破译者来说想要破解出加密前的原始值将会相当困难。

最后,采用了图片形式存储软件序列号的方式。如果将软件序列号存储在文件当中,当文件被查到后很轻松就能读出该软件的序列号,而且如果对序列号进行修改,就会影响到软件的正常运行。相信这种情况是任何软件开发商都不想遇到的,因为这样将会给软件维护带来不必要的麻烦。利用该种方式存储产品的序列号很难让人知道其中存储的具体内容,并且不易于对其修改,加强了软件相关信息的隐藏及保护作用。

四、使用随机多重加密方法对小型软件注册过程加密的实例

1、假设条件

定义3、BASE64码是经过BASE64算法处理后产生的字符串的值。

定义4、MD5码是经过MD5算法处理后产生的字符串的值。

定义5、自制码是经过自制算法处理后产生的字符串的值。

此实例使用了三种加密算法,BASE64和MD5是两种比较成熟的算法,还有一种是自己设计的算法,因此实例中给出n的值为3,同时规定产生随机数的个数m为5。规定获得的本地机的机器标识为MAC网卡地址。

2、软件注册过程

实例的实现下面是该种方法在小型软件注册过程中应用的一个实例。假设软件第一次运行时获得的本地机器的MAC网卡地址为00115BD0457E,通过BASE64加密处理后得到BASE64码:MDAxM TVCRDAON TdF,并将其显示在软件注册界面上,提示用户通过电子邮件或电话发送给软件开发商。

软件开发商利用BASE64解密算法将其解密,还原为注册用户的MAC网卡地址。运行产生序列号的程序,随机产生5个1~3之间的整数,本例中产生的加密序列a1,a2,...am为22132。首先,对MAC网卡地址进行MD5算法处理;然后,再利用MD5算法对产生的MD5码加密处理,依次执行完加密序列中各随机数对应的加密算法;最后,将产生的字符串和加密序列22132连接构成此用户的最终序列号。此过程产生的相关算法码值如图1所示。

软件开发商将最终序列号返还给注册用户,注册用户将其填入序列号框,执行提交操作。软件会将序列号拆分为加密算法最后产生的字符串和加密序列两部分。再按照加密序列的顺序对MAC网卡地址进行相应算法的处理,将产生的最终字符串同拆分出的字符串进行比较,如果相同,证明注册合法,存储注册序列号生成的三维码图片,同时运行程序;如果不同,提示用户注册失败,停止运行该程序。

3、软件注册处理流程

4、相关代码

本例中用到mainFrom类、MacAddress类、Base64类、MD5类和addSwape类,还用到了生成二维码图片的cre-ateQ Rco de类。由于篇幅有限,下面仅给出体现多重加密方法的主类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) ;

}

}

小知识之软件加密软件加密就是用户在发送信息前,先调用信息安全模块对信息进行加密,然后发送,到达接收方后,由用户使用相应的解密软件进行解密并还原。采用软件加密方式有以下优点:已经存在标准的安全API(Application Programming Interface,应用程序编程接口)产品、实现方便、兼容性好。