如何用java语言对即时通讯软件进行加密

如何用java语言对即时通讯软件进行加密

一、Java软件加密基本思路对于应用软件的保护笔者从两个方面进行考虑,第一是阻止盗版使用软件,第二是阻止竞争对手对软件反编译,即阻止对软件的逆向工程。1、阻止盗版在软件运行时对自身存在的合法性进行判断,如果认为自身的存在和运行是被授权的、合法的,就运行;否则终止运行。这样即使软件可以被随意复制,只要盗版用户没有相应的授权信息就无法使用软件。2、阻止反编译对编译产生的Class文件加密处理,并在运行时进行解密,解密者无法对软件进行反编译。二、Java软件加密的总体流程为了保护用Java语言开发的软件,我们设计并实现了一个实用、高强度的加密算法。以下称需要保护的Java软件为“受保护程序”,称对“受保护程序”进行加密保护的软件为“加密程序”。对软件加密保护的流程如图1所示。三、加密算法分析设计1、用户信息提取器设计为了防止用户发布序列号而导致“一次发行,到处都是”的盗版问题,提取用户机器中硬件相关的、具有唯一性的信息——用户计算机的硬盘分区C的序列号,并要求用户将此信息与用户名一起返回,之后用“序列号生成器”根据用户返回信息生成一个唯一合法的软件注册序列号发回用户,用户即可使用此号码注册使用软件。这个信息提取器使用Winclows 32汇编以一个独立的小程序方式实现,程序代码如图2所示。2、序列号生成器与序列号合法性判断函数的设计序列号生成器与序列号合法性判断函数中运用RSA加密算法。在序列号生成器中是使用私钥将用户返回的信息(硬盘序列号,用户名)进行加密得到相应的注册序列号;在序列号合法性判断函数中使用私钥将用户输入的注册序列号解密,再与(硬盘序列号,用户名)进行比较,一致则调用程序装载器将程序其他部分解密装入内存,初始化删环境并运行程序主体;否则退出。RSA加密算法的实现需要使用大数运算库,我们使用MIRACL大数库来实现RSA计算,序列号生成器的主要代码如下:char szlnputString[]=”机器码和用户名组成的字符串”;char szSerial[256]=[0];//用于存放生成的注册码bign,d,c,m; //MIRACL中的大数类型mip→IBASE=16; //以16进制模式n= mlrvar(0); //初始化大数d= mirvar(0);c= mirvar(0); //C存放输入的字符串大数m= mlrva(o);bytes to big( len, szlnputString,c);//将输入字符串转换成大数形式并存入变量c中cinstr(n,”以字符串形成表示的模数”);//初始化模数cinstr(d,”以字符串形成表示的公钥”)://初始化公钥powmod(c,d,n,m); //计算m=cdmod ncotstr(m,szSerial);//m的16进制字符串即为注册码序列号合法性检测函数的主要代码如下:char szlnputStringL]=”机器码和用户名组成的字符串”;char szSerial[ 256]=”用户输入的序列号”bign,e,c,m; //MIRACL中的大数类型mip→IBASE=16; //以16进制模式cinstr(m,szSerial); //将序列号的16进制转成大数形式cinstr(n,”模数n的字符串形式”);//初始化模数ncinstr(e,”字符串形式的公钥”);//初始化公钥if compare(m,n)==-1) //m