当前位置: 首页 > 工具软件 > License3j > 使用案例 >

license3j应用:使用license3jrepl生成license说明

田德馨
2023-12-01

11.19更新:windows上用License3jrepl-3.1.5-jar-with-dependencies.jar添加中文变量会乱码,MacOS、Linux没问题。

某Java Web工程,使用License3j来制作许可证对项目进行授权管理。
License3j:https://github.com/verhas/License3j,使用3.1.5版本。
参考:https://github.com/prarshah/License3j-small_example
下载license3jrepl:https://github.com/verhas/License3jRepl/releases/download/3.1.5/License3jrepl-3.1.5-jar-with-dependencies.jar
如下命令:

# java -jar License3jrepl-3.1.5-jar-with-dependencies.jar  

L3j> $ generateKeys algorithm=RSA size=1024 format=BASE64 public=public.key private=private.key

在目录下会生成两个文件:public.key和private.key。
执行dumpPublicKey获得Key,可在你的项目工程里使用。

L3j> $ dumpPublicKey
No license in memory
Public key in memory.
Private key in memory.
[INFO] 
--KEY DIGEST START
byte [] digest = new byte[] {
(byte)0x46, 
(byte)0x28, (byte)0x58, (byte)0x78, (byte)0x68, (byte)0x0E, (byte)0xB2, (byte)0xD8, (byte)0xBD, 
(byte)0xFE, (byte)0x22, (byte)0x9E, (byte)0xA8, (byte)0x03, (byte)0xFB, (byte)0xB2, (byte)0xF1, 
(byte)0x61, (byte)0xC6, (byte)0x9E, (byte)0x07, (byte)0xA2, (byte)0x40, (byte)0x8E, (byte)0x6E, 
(byte)0x22, (byte)0x26, (byte)0x33, (byte)0x8D, (byte)0x91, (byte)0x57, (byte)0x27, (byte)0xC2, 
(byte)0x9B, (byte)0x09, (byte)0x0F, (byte)0xF9, (byte)0x3C, (byte)0xB0, (byte)0x8B, (byte)0xFE, 
(byte)0x6A, (byte)0xDA, (byte)0x67, (byte)0xFA, (byte)0x3D, (byte)0xF3, (byte)0x85, (byte)0xCA, 
(byte)0x74, (byte)0xAA, (byte)0x96, (byte)0x6C, (byte)0x37, (byte)0x69, (byte)0x43, (byte)0x26, 
(byte)0x72, (byte)0xBF, (byte)0xF8, (byte)0x35, (byte)0x68, (byte)0x28, (byte)0xBA, 
};
---KEY DIGEST END
--KEY START
byte [] key = new byte[] {
(byte)0x52, 
(byte)0x53, (byte)0x41, (byte)0x00, (byte)0x30, (byte)0x81, (byte)0x9F, (byte)0x30, (byte)0x0D, 
(byte)0x06, (byte)0x09, (byte)0x2A, (byte)0x86, (byte)0x48, (byte)0x86, (byte)0xF7, (byte)0x0D, 
(byte)0x01, (byte)0x01, (byte)0x01, (byte)0x05, (byte)0x00, (byte)0x03, (byte)0x81, (byte)0x8D, 
(byte)0x00, (byte)0x30, (byte)0x81, (byte)0x89, (byte)0x02, (byte)0x81, (byte)0x81, (byte)0x00, 
(byte)0x90, (byte)0x79, (byte)0x66, (byte)0x6A, (byte)0x22, (byte)0x50, (byte)0xF3, (byte)0x7C, 
(byte)0xDB, (byte)0x44, (byte)0x9C, (byte)0x7A, (byte)0x1F, (byte)0xFB, (byte)0x4C, (byte)0x53, 
(byte)0x3C, (byte)0xA5, (byte)0x51, (byte)0x07, (byte)0x91, (byte)0x77, (byte)0x46, (byte)0x82, 
(byte)0xA1, (byte)0x69, (byte)0xC2, (byte)0x1A, (byte)0x41, (byte)0xD1, (byte)0x53, (byte)0x30, 
(byte)0xB8, (byte)0x9F, (byte)0x4A, (byte)0xCB, (byte)0x9B, (byte)0xFC, (byte)0x7C, (byte)0xC9, 
(byte)0xE1, (byte)0xBE, (byte)0x2A, (byte)0xD9, (byte)0xCD, (byte)0x89, (byte)0xF3, (byte)0xBE, 
(byte)0xD6, (byte)0x41, (byte)0x36, (byte)0x9A, (byte)0x20, (byte)0xB3, (byte)0xC6, (byte)0x08, 
(byte)0xC0, (byte)0x7D, (byte)0x10, (byte)0xB2, (byte)0x32, (byte)0x4D, (byte)0x94, (byte)0x19, 
(byte)0x76, (byte)0xA8, (byte)0x70, (byte)0x0E, (byte)0xDD, (byte)0x8A, (byte)0x34, (byte)0x05, 
(byte)0xAE, (byte)0x0C, (byte)0x66, (byte)0x0F, (byte)0xC7, (byte)0x8C, (byte)0x64, (byte)0x8E, 
(byte)0xEE, (byte)0x5C, (byte)0x9E, (byte)0x0D, (byte)0x1F, (byte)0x2F, (byte)0x14, (byte)0x39, 
(byte)0xC4, (byte)0xD4, (byte)0x4F, (byte)0xAD, (byte)0x5E, (byte)0xD0, (byte)0x57, (byte)0x6A, 
(byte)0xE9, (byte)0x28, (byte)0xF3, (byte)0xBE, (byte)0x7A, (byte)0xD1, (byte)0x64, (byte)0xB3, 
(byte)0x0E, (byte)0x45, (byte)0x0E, (byte)0x5B, (byte)0xD5, (byte)0x1B, (byte)0x8F, (byte)0xDB, 
(byte)0xC7, (byte)0x14, (byte)0x6C, (byte)0x8A, (byte)0xBA, (byte)0x42, (byte)0xA3, (byte)0xC8, 
(byte)0x07, (byte)0x14, (byte)0xC5, (byte)0x2D, (byte)0xAE, (byte)0x8F, (byte)0xE6, (byte)0xFD, 
(byte)0x02, (byte)0x03, (byte)0x01, (byte)0x00, (byte)0x01, 
};
---KEY END

然后创建新的License。

L3j> $ newLicense

设置自定义的内容

L3j> $ feature id:INT=13922
L3j> $ feature name:STRING=中文名字

保存License:

L3j> $ saveLicense format=BASE64 license.base64

进行签名:

L3j> $ sign

再保存,

L3j> $ saveLicense format=BASE64 license.base64

校验下签名,显示signed就可以在自己的工程里使用了。

L3j> $ verify
License w/o owner is in memory.
Public key in memory.
Private key in memory.
[INFO] License is properly signed.

下面是Demo代码:

// Demo code start
        License license = new License();
        try {
            license= new LicenseReader(this.getClass().getResource("/").getPath() + "/license/license.base64")
                    .read(IOFormat.BASE64);

            byte [] key = new byte[] {
                    (byte)0x52,
                    (byte)0x53, (byte)0x41, (byte)0x00, (byte)0x30, (byte)0x81, (byte)0x9F, (byte)0x30, (byte)0x0D,
                    (byte)0x06, (byte)0x09, (byte)0x2A, (byte)0x86, (byte)0x48, (byte)0x86, (byte)0xF7, (byte)0x0D,
                    (byte)0x01, (byte)0x01, (byte)0x01, (byte)0x05, (byte)0x00, (byte)0x03, (byte)0x81, (byte)0x8D,
                    (byte)0x00, (byte)0x30, (byte)0x81, (byte)0x89, (byte)0x02, (byte)0x81, (byte)0x81, (byte)0x00,
                    (byte)0x90, (byte)0x79, (byte)0x66, (byte)0x6A, (byte)0x22, (byte)0x50, (byte)0xF3, (byte)0x7C,
                    (byte)0xDB, (byte)0x44, (byte)0x9C, (byte)0x7A, (byte)0x1F, (byte)0xFB, (byte)0x4C, (byte)0x53,
                    (byte)0x3C, (byte)0xA5, (byte)0x51, (byte)0x07, (byte)0x91, (byte)0x77, (byte)0x46, (byte)0x82,
                    (byte)0xA1, (byte)0x69, (byte)0xC2, (byte)0x1A, (byte)0x41, (byte)0xD1, (byte)0x53, (byte)0x30,
                    (byte)0xB8, (byte)0x9F, (byte)0x4A, (byte)0xCB, (byte)0x9B, (byte)0xFC, (byte)0x7C, (byte)0xC9,
                    (byte)0xE1, (byte)0xBE, (byte)0x2A, (byte)0xD9, (byte)0xCD, (byte)0x89, (byte)0xF3, (byte)0xBE,
                    (byte)0xD6, (byte)0x41, (byte)0x36, (byte)0x9A, (byte)0x20, (byte)0xB3, (byte)0xC6, (byte)0x08,
                    (byte)0xC0, (byte)0x7D, (byte)0x10, (byte)0xB2, (byte)0x32, (byte)0x4D, (byte)0x94, (byte)0x19,
                    (byte)0x76, (byte)0xA8, (byte)0x70, (byte)0x0E, (byte)0xDD, (byte)0x8A, (byte)0x34, (byte)0x05,
                    (byte)0xAE, (byte)0x0C, (byte)0x66, (byte)0x0F, (byte)0xC7, (byte)0x8C, (byte)0x64, (byte)0x8E,
                    (byte)0xEE, (byte)0x5C, (byte)0x9E, (byte)0x0D, (byte)0x1F, (byte)0x2F, (byte)0x14, (byte)0x39,
                    (byte)0xC4, (byte)0xD4, (byte)0x4F, (byte)0xAD, (byte)0x5E, (byte)0xD0, (byte)0x57, (byte)0x6A,
                    (byte)0xE9, (byte)0x28, (byte)0xF3, (byte)0xBE, (byte)0x7A, (byte)0xD1, (byte)0x64, (byte)0xB3,
                    (byte)0x0E, (byte)0x45, (byte)0x0E, (byte)0x5B, (byte)0xD5, (byte)0x1B, (byte)0x8F, (byte)0xDB,
                    (byte)0xC7, (byte)0x14, (byte)0x6C, (byte)0x8A, (byte)0xBA, (byte)0x42, (byte)0xA3, (byte)0xC8,
                    (byte)0x07, (byte)0x14, (byte)0xC5, (byte)0x2D, (byte)0xAE, (byte)0x8F, (byte)0xE6, (byte)0xFD,
                    (byte)0x02, (byte)0x03, (byte)0x01, (byte)0x00, (byte)0x01,
            };
            if( !license.isOK(key) ){
                // if not signed, stop the application
                System.out.println("license not signed");
            } else {
                System.out.println("license signed");
            }
            int user_id = license.get("id").getInt();
            System.out.println("Extracted feature user id:" + user_id );
        } catch (IOException e) {
            System.out.println("Error reading license file " + e);
        }
// Demo code end

简书链接:license3j应用:使用license3jrepl生成license说明https://www.jianshu.com/p/9b4a469d4943

 类似资料: