posts - 38,  comments - 22,  trackbacks - 0


  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 阅读(314) 评论(0)  编辑  收藏 所属分类: Swing