很多成型的应用软件都有试用版和正式版之分,试用版一般都有功能上的限制,同时也有使用次数或使用期限的限制。要使试用版成为正式版,有些软件是要求你拿注册码注册,还有一些软件是通过授权文件来区分试用版和正式版,从试用版变成正式版,只是把授权文件换一下而已。一般来说,桌面软件会采用注册码的方式较多,而服务器端软件采用授权文件的较多,授权文件一般会将要限制的信息,比如并发数、最后日期等明文、密文一块保存。

 

本人在做项目过程中采用了一种变通的解决方式,让我的应用有了使用日期的限制:

 

1、将要限制的日期采用MD5加密,连同明文的日期一起放在一个配置文件里

2、在程序中加一个过滤器,读取这个配置文件,通过对读取到的明文重新进行加密,和从配置文件里读取到的密文进行比较

3、如果两者不一致,表明授权文件遭到篡改,不再继续提供服务

4、如果两者一致,继续比较从配置文件里读取的限制日期和当前日期,如果当前日期晚于限制日期,表明使用期限已到,不再继续提供服务

5、否则继续提供服务

 

相关代码如下:

 

加密类

Java代码
  1. public class SecurityUtil {
    //采用这个类将明文加密
  2.  
  3. /**
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8. String expiration = "2012-10-09";
  9. String signature = "";
  10. try{
  11. signature = SecurityUtil.doMessageDigest(expiration);
  12. }
  13. catch(Exception e){
  14. e.printStackTrace();
  15. }
  16. System.out.println("expiration:" + expiration + "\nsignature:" + signature);//产生的密文和明文一起存入配置文件
  17.  
  18. }
  19.  
  20. public static String doMessageDigest(String arg) throws Exception{
  21. //要生成摘要的明文
  22. byte[] b=arg.getBytes("UTF8");
  23.  
  24. //生成摘要
  25. MessageDigest md=MessageDigest.getInstance("MD5");
  26. md.update(b);
  27. byte[]s=md.digest();
  28.  
  29.  
  30. //显示生成的摘要
  31. String res="";
  32. for(int i=0;i<s.length;i++){
    //将字节数组转换成字符串
  33. res=res+Integer.toHexString((0x000000ff&s[i])|0xffffff00).substring(6);
  34. }
  35. return res;
  36. }
  37.  
  38. }  
public class SecurityUtil {//采用这个类将明文加密        /**      * @param args      */      public static void main(String[] args) {          // TODO Auto-generated method stub          String expiration = "2012-10-09";          String signature = "";          try{              signature = SecurityUtil.doMessageDigest(expiration);          }          catch(Exception e){              e.printStackTrace();          }          System.out.println("expiration:" + expiration + "\nsignature:" + signature);//产生的密文和明文一起存入配置文件        }            public static String doMessageDigest(String arg) throws Exception{          //要生成摘要的明文          byte[] b=arg.getBytes("UTF8");                      //生成摘要          MessageDigest md=MessageDigest.getInstance("MD5");          md.update(b);          byte[]s=md.digest();                                 //显示生成的摘要          String res="";          for(int i=0;i