alloy的许可证分成四个部分,每个部分之间用#号分隔,第一部分是许可证过期时间,第二部分是用户名,第三和第四部分是两个36进制的整数,其中第三部分是校验码,第四部分是一个随机数(我是这么认为的,第四部分写死成一个常量也没有什么关系)。   
      好了,了解了许可证的构造之后,我们来了解一下alloy检验许可证是否合法和过期的过程。   
      一:分离许可证的各个部分。   
      二:判断日期部分的长度,如果长度大于1,就构造一个过期时间,否则过期时间为null。(这下子我们就可以通过使日期部分的长度不超过1来让alloy永不过期了^-^)。   
      三:调用Long.parseLong(String,   int)方法解析出第三和第四部分两个36进制整数的10进制的值。   
      四:使用java.util.zip.CRC32来计算校验值,计算的过程是把从第四部分得到的10进值整数对127取模,然后加上第一、二两个部分(包括中间的#号),这样就构造出一个字符串,然后调用CRC32.update()方法计算这个字符串的校验值。   
      五:使用getValue()方法从CRC32中取得校验值,然后将这个校验值与从第三部分获得的10进制数值比较,如果相等,则校验成功。随后就是判断当前日期是否过期的操作了。   
      这大致就是alloy验证许可证的过程,我们反过来做一遍,就可以得到我们自己的许可证了。下面就是我写的构造许可证的方法,供大家参考。       
  public   String   generate(String   user)   
  {   
          String   exp   =   "x";   
          String   rand   =   "torresg";   
          long   l   =   Long.parseLong(rand,   36);   
          CRC32   crc32   =   new   CRC32();   
          crc32.update((l   %   127L   +   exp   +   "#"   +   user).getBytes());   
          String   checksum   =   Long.toString(crc32.getValue(),   36);   
          return   exp   +   "#"   +   user   +   "#"   +   checksum   +   "#"   +   rand;   
  }       
  另外就是过期时间不能为空,因为alloy中另外某个地方要对这个时间进行处理。为空的话也会验证失败。所以过期时间要使用一个长度为1的字符串。 
com.incors.plaf.alloy.AlloyLookAndFeel.setProperty("alloy.licenseCode",
    "v#ej_technologies#uwbjzx#e6pck8");
  try {
   javax.swing.LookAndFeel alloyLnF = new com.incors.plaf.alloy.AlloyLookAndFeel();
   javax.swing.UIManager.setLookAndFeel(alloyLnF);
  } catch (javax.swing.UnsupportedLookAndFeelException ex) {
   // You may handle the exception here
   ex.printStackTrace();
  }
	posted on 2007-01-11 11:00 
aaabbb 阅读(347) 
评论(0)  编辑  收藏  所属分类: 
Swing