|
@@ -40,9 +40,9 @@ public class AppLicenseUtil {
|
|
|
* @param filePath
|
|
|
* @return
|
|
|
*/
|
|
|
- public static AppLicense parseLicense(String filePath) {
|
|
|
+ public static AppLicense parseLicense(String filePath, String version) {
|
|
|
try {
|
|
|
- return parseLicense(ByteArray.fromFile(new File(filePath)).value());
|
|
|
+ return parseLicense(ByteArray.fromFile(new File(filePath)).value(), version);
|
|
|
} catch (Exception e) {
|
|
|
log.error("Solar license parse error", e);
|
|
|
}
|
|
@@ -50,22 +50,43 @@ public class AppLicenseUtil {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 直接解析许可证文件内容
|
|
|
+ * 解析授权文件获得授权信息
|
|
|
*
|
|
|
- * @param data
|
|
|
+ * @param data 授权文件二进制内容
|
|
|
+ * @param version 版本号格式为x.x.x
|
|
|
* @return
|
|
|
*/
|
|
|
- public static AppLicense parseLicense(byte[] data) {
|
|
|
+ public static AppLicense parseLicense(byte[] data, String version) {
|
|
|
try {
|
|
|
byte[] original = ArrayUtils.subarray(data, 1, data.length);
|
|
|
- //是否绑定硬件
|
|
|
+ // 不限制设备
|
|
|
if (data[0] == 0) {
|
|
|
- //不绑定硬件
|
|
|
- } else if (data[0] == 1) {
|
|
|
- //获取当前设备标识
|
|
|
+ // 不绑定硬件
|
|
|
+ }
|
|
|
+ //限制设备,不限制版本
|
|
|
+ else if (data[0] == 1) {
|
|
|
+ // 获取当前设备标识
|
|
|
String deviceId = DeviceInfo.current().uuid();
|
|
|
- //使用设备标识进行AES解密
|
|
|
+ // 使用设备标识进行AES解密
|
|
|
original = AES.decrypt(original, deviceId.substring(0, 16), deviceId.substring(16)).value();
|
|
|
+ }
|
|
|
+ //不限制设备,限制版本
|
|
|
+ else if (data[0] == 2) {
|
|
|
+ // 获取当前版本号MD5
|
|
|
+ String versionMd5 = ByteArray.md5(version).toHexString();
|
|
|
+ // 使用版本号MD5进行AES解密
|
|
|
+ original = AES.decrypt(original, versionMd5.substring(0, 16), versionMd5.substring(16)).value();
|
|
|
+ }
|
|
|
+ //限制设备,限制版本
|
|
|
+ else if (data[0] == 3) {
|
|
|
+ // 获取当前设备标识
|
|
|
+ String deviceId = DeviceInfo.current().uuid();
|
|
|
+ // 获取当前版本号MD5
|
|
|
+ String versionMd5 = ByteArray.md5(version).toHexString();
|
|
|
+ // 使用版本号MD5与设备标识进行两次AES解密
|
|
|
+ original = AES
|
|
|
+ .decrypt(AES.decrypt(original, versionMd5.substring(0, 16), versionMd5.substring(16)).value(),
|
|
|
+ deviceId.substring(0, 16), deviceId.substring(16)).value();
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|