`
阅读更多

 

  1package com.incors.plaf.alloy;
  2
  3import java.io.*;
  4import java.util.GregorianCalendar;
  5import java.util.zip.CRC32;
  6import java.util.*;
  7
  8public class ch{
  9  public ch(){
 10  }

 11
 12  private static void a(){
 13    if(a)
 14      return;
 15    bi.a("alloy.licenseCode",cr()); // feed serial automatically
 16    String s=bi.a("alloy.licenseCode");
 17    if(s == null)
 18      try{
 19        InputStream inputstream=(com.incors.plaf.alloy.ch.class).getClassLoader().
 20                                getResourceAsStream("alloylnf.lic");
 21        if(inputstream != null){
 22          InputStreamReader inputstreamreader=new InputStreamReader(inputstream,
 23                                              "ISO-8859-1");
 24          BufferedReader bufferedreader=new BufferedReader(inputstreamreader);
 25          s=bufferedreader.readLine();
 26          System.out.println(s);
 27          bi.a("alloy.licenseCode",s);
 28          bufferedreader.close();
 29          inputstream.close();
 30        }

 31      }

 32      catch(Exception exception){}
 33    if(s != null){
 34      int l=s.indexOf('#');
 35      int i1=s.indexOf('#',l + 1);
 36      int j1=s.indexOf('#',i1 + 1);
 37      f=s.substring(0,l);
 38      if(f.length() > 1)
 39        j=a(f);
 40      e=s.substring(l + 1,i1);
 41      d=s.substring(0,i1);
 42      g=Long.parseLong(s.substring(i1 + 1,j1),36);
 43      h=Long.parseLong(s.substring(j1 + 1),36);
 44      b();
 45    }

 46    a=true;
 47  }

 48
 49  private static void b(){
 50    i.update((h % 127L + d).getBytes());
 51    if(i.getValue() != g){
 52      b=false;
 53      return;
 54    }

 55    if(j != null && (new GregorianCalendar()).after(j))// 试用号过期
 56      b=false;
 57      return;
 58    }

 59    b=true;
 60    if(j != null && (new GregorianCalendar()).after(new GregorianCalendar(2003,7,12)))// 如果使用期大于1年
 61      GregorianCalendar gregoriancalendar=new GregorianCalendar();
 62      gregoriancalendar.add(1,1);
 63      if(j.after(gregoriancalendar)){
 64        c=false;
 65        return;
 66      }

 67    }

 68    c=true;
 69  }

 70
 71  private static GregorianCalendar a(String s){
 72    int l=Integer.parseInt(s.substring(0,4));
 73    int i1=Integer.parseInt(s.substring(5,7));
 74    int j1=Integer.parseInt(s.substring(8,10));
 75    return new GregorianCalendar(l,i1 - 1,j1 + 1);
 76  }

 77
 78  public static boolean c(){
 79    if(!a)
 80      a();
 81    return bi.a("alloy.licenseCode"!= null;
 82  }

 83
 84  public static boolean d(){
 85    if(!a)
 86      a();
 87    return b;
 88  }

 89
 90  public static boolean e(){
 91    if(!a)
 92      a();
 93    return c;
 94  }

 95
 96  private static boolean a=false;
 97  private static boolean b=false;
 98  private static boolean c=false;
 99  private static String d;
100  public static String e;
101  public static String f;
102  public static long g=0L;
103  public static long h=0L;
104  private static CRC32 i=new CRC32();
105  public static GregorianCalendar j;
106
107  private static String cr()// 自动生成序列号,比当前时间晚一个月
108    Calendar cal=new GregorianCalendar();
109    cal.add(cal.MONTH,1);
110
111    String s="";
112    int year=cal.get(cal.YEAR);
113    int month=cal.get(cal.MONTH);
114    int day=cal.get(cal.DAY_OF_MONTH);
115
116    s+=year + "/" + (month < 10 ? "0" + month : month) + "/" + (day < 10 ? "0" + day
117        : day);
118    s+="#oop@vip.163.com#128cw93#1a193l";
119
120    int l=s.indexOf('#');
121    int i1=s.indexOf('#',l + 1);
122    int j1=s.indexOf('#',i1 + 1);
123
124    String e=s.substring(l + 1,i1);
125    String d=s.substring(0,i1);
126    String sg=s.substring(i1 + 1,j1);
127    Long g=Long.parseLong(sg,36);
128    Long h=Long.parseLong(s.substring(j1 + 1),36);
129
130    CRC32 crc=new CRC32();
131    crc.update((h % 127L + d).getBytes());
132    Long ii=crc.getValue();
133    StringBuffer sn=new StringBuffer(s).replace(i1 + 1,j1,Long.toString(ii,36));
134    return sn.toString();
135  }

136}

137

关键代码处有注释,我就详细讲一下cr()。
由于Alloy的序列号的时间比当前时间晚一年以上也视作invalid,因此我在cr()中动态生成一个序列号,该序列号比当前时间晚一个月,使用bi.a()注入程序中(15行)。
111行到133行是具体的算号过程,可见“128cw93”和“1a1931”其实是两个36进制的数。
第133行把算得的校验值替换118行生成的字符串中的相应位置上的字符串,生成新的序列号。
分享到:
评论

相关推荐

    逻辑建模工具Alloy用户手册

    ### 逻辑建模工具Alloy用户手册知识点解析 #### 一、引言 逻辑建模工具Alloy是一款专为软件设计而开发的语言及配套分析...通过学习和掌握Alloy,开发者不仅可以提高软件设计的质量,还可以加速软件开发的整个过程。

    形式化建模Alloy最好参考书

    ### 形式化建模Alloy最佳参考书知识点解析 #### 一、Alloy简介与应用 Alloy是一种轻量级的形式化建模语言,它主要用于软件系统的抽象、逻辑表达及分析。通过Alloy,开发者可以清晰地定义系统的行为、状态以及约束...

    alloy学习资料.zip

    alloy语言学习资料(英文版) alloy-language-reference.pdf Alloy2Tutorial.pdf 工具(需要安装JDK1.8) alloy4.2.jar alloy例子

    alloy.jar XP界面

    alloy.jar 是一个界面类,可以结合java生成类似于XP的图形界面,美观实用!

    alloy-2.0.0.zip

    Alloy是Titanium Mobile SDK的一个核心部分,它是一个基于模型-视图-控制器(MVC)架构的轻量级JavaScript框架,旨在简化iOS、Android和Web应用的开发过程。 Alloy框架的核心特点包括: 1. MVC架构:MVC模式将应用...

    alloy4.2.jar

    形式化方法的小工具一个

    aui yui alloy2.0

    本文将深入探讨AUI YUI Alloy2.0的核心特性和使用方法。 首先,AUI(Alloy UI)是基于YUI(Yahoo User Interface Library)的一个扩展,它提供了更多的组件和设计模式,旨在简化和加速Web应用的开发。AUI YUI Alloy...

    Alloy.jar

    alloy.jar 是一个界面类,可以结合java生成类似于XP的图形界面,美观实用!

    Charge polarization and quantum trapping in AgPd and CuPd bimetallic alloy catalysts

    Charge polarization and quantum trapping in AgPd and CuPd bimetallic alloy catalysts,孙长庆,,AgPd and CuPd alloys are important catalysts that perform very differently with physical origins being ...

    GMW 15340-2011 Polyolefin Alloy - Talc Filled, High Stiffness,.

    GMW 15340-2011 Polyolefin Alloy - Talc Filled, High Stiffness,.

    高清播放器Light Alloy v4.9.1 Build 2416.zip

    Light Alloy是一款支持高清播放的视频播放器,虽然是免费的,但是功能却很强大,支持常见格式 ,内置了解码器,支持更换皮肤等。,几乎支持所有视频格式,也提供多款皮肤应用,是一款潜力巨大的多媒体播放器软件,...

    Alloy Physical Shader Framework3.2 Unity3D超700+材质球&贴图

    《Unity3D中的Alloy Physical Shader Framework 3.2:打造逼真材质与贴图的艺术》 Unity3D是一款广泛应用于游戏开发、虚拟现实、增强现实等领域的强大引擎,其核心优势之一就是丰富的图形渲染能力。在这款引擎中,...

    Alloy-源码.rar

    4. **文档**:可能有 `README.md` 文件,介绍项目背景、安装指南、使用方法等;`API.md` 或者 `docs` 文件夹可能包含详细的技术文档。 5. **资源文件**:如 `assets` 文件夹,可能包含图片、字体、音频等资源。 ...

    alloy:Alloy是Appcelerator Titanium SDK的MVC框架

    Alloy是用于的MVC应用程序框架。 可以在以下位置找到更多高级详细信息: : 入门 涵盖了从安装到使用Alloy创建第一个应用程序的所有内容。 完整集合 在实践中显示合金各个方面。 安装 来自npm: # install the ...

    alloy_Liferay使用YUI封装的框架,含使用文档

    本文将详细解析Alloy_Liferay的核心概念、主要特点以及使用方法,同时涵盖其提供的使用文档,帮助开发者更好地理解和应用这个框架。 首先,让我们来了解一下YUI。YUI是Yahoo开发的一套开源JavaScript库,它提供了...

    GMW 16826-2013 Polyolefin Alloy - 1700 MPa Flexural.pdf

    GMW 16826-2013 Polyolefin Alloy - 1700 MPa Flexural.pdf

    ModelC_alloy.rar_dendrite_dendrite model alloy_枝晶_相场

    采用相场方法,计算合金中枝晶生长,标记为相场模型C_alloy。

    Swing主题包Alloy

    Swing 主题包 Alloy。使用方法请见http://blog.csdn.net/levelmini/article/details/25063401中的invokeApp()或自行百度

Global site tag (gtag.js) - Google Analytics