新添加激活码激活平台功能
设计数据变更:
添加
pc_activation
激活表添加
sys_menu
菜单信息
INSERT INTO sys_config` (`config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('MAC地址参数', 'mac_address_type_name', 'enp3s0f0', 'Y', 'admin', '2023-03-09 16:01:47', '', NULL, NULL);
CREATE TABLE `pc_activation` (
`system_code` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '设备码',
`activation_code` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '激活码',
`activation_status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '激活码标识',
PRIMARY KEY (`system_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `sys_menu` (`menu_name`, `parent_id`, `order_num`, `url`, `target`, `menu_type`, `visible`, `is_refresh`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES ('版本信息', 0, 10, '/pc/pc_activation/show', 'menuItem', 'C', '0', '1', 'pc:pc_activation:edit', '#', 'admin', '2022-12-12 15:25:15', 'admin', '2022-12-12 15:31:24', '');
INSERT INTO `sys_config` ( `config_name`, `config_key`, `config_value`, `config_type`, `create_by`, `create_time`, `update_by`, `update_time`, `remark` )
VALUES
( 'MAC地址参数', 'mac_address_type_name', 'wlan4', 'Y', 'admin', '2023-03-09 16:01:47', '', NULL, NULL );
公钥RSAPublicKey
:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNMGBEQTyKC+2zh2CUxEDI8M3jSpSFIwDjW1JLCzJCQDTclGqX/A3DWsS+PMrFfRxd0w9rIoLx1DjF2KpJmAzUKpFHtptm8tWPAaPgcl58x7zJvnYUHIMcejXhUZfqE8qHVVQeNaUGxq2Nn9S2s+dFVJ9zSc327mS9Ym0xt2wTYQIDAQAB
私钥RSAPrivateKey
:
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM0wYERBPIoL7bOHYJTEQMjwzeNKlIUjAONbUksLMkJANNyUapf8DcNaxL48ysV9HF3TD2sigvHUOMXYqkmYDNQqkUe2m2by1Y8Bo+ByXnzHvMm+dhQcgxx6NeFRl+oTyodVVB41pQbGrY2f1Laz50VUn3NJzfbuZL1ibTG3bBNhAgMBAAECgYAnewFq4KqHXVg1TP0WYtScVUkoTLdbDqsjE/U3n0XiXXxOXPhNmiAD0Lk+aXASo8oLe4rh8FgFs/Hgj5nkYy9EY2B+e4nzdGkaXpLCYJQL8gYFnh+TlcJnhcKBHkQuBGORVghDWOky0bMyKxdPlO20B8AySThHaQ6k/CWjJFkMKQJBAOdlQbp//cCRImTI1GIW3ghQuqGrOtrQHnLO4My/FsW5elaqKhU3sfAAa+Tk7jWm0cdsu5OYFjvsjzmrea0Y5wsCQQDjAcJCQn275itpTtOjqLDGH0lf2AKFv+DARBDdvZNDULirzUpiMT6xHlWyIu3NXD6oRofvKiF40ADKOJPSsgLDAkEAhLM9Dod4LocNAl9p7RbQHlStsylPh0zzKUQbB1BO7vV/g1Py7lgSY2Daf1oKgho5E/T3XZ1KovL28Eu2a95sIQJAdgITD0jrfgOAa8UrpjdqdgQLq8RqQ0dlOe3oaq1DYcoTxlP5KCR7d63SVMFtp8UdWXMY9U6MifZvgrB4wB4D6wJBAILQrxAtbzMG9qD9jLBjBy6dVpMTGS2NqSUlIHz5CFdGT5d9gLMjLJ5cCovKgdzrX+pyAFmUIy7n3BFkGHtWcTs=
try {
// InetAddress inetAddress = InetAddress.getLocalHost();
// String macAddress = SystemUtil.getMacAddress(inetAddress);
//String systemCode = Md5Utils.hash(macAddress).toUpperCase();
String systemCode = "EA60BF27E27CE853EEBF4E8BACF69CCA";
String RSAPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNMGBEQTyKC+2zh2CUxEDI8M3jSpSFIwDjW1JLCzJCQDTclGqX/A3DWsS+PMrFfRxd0w9rIoLx1DjF2KpJmAzUKpFHtptm8tWPAaPgcl58x7zJvnYUHIMcejXhUZfqE8qHVVQeNaUGxq2Nn9S2s+dFVJ9zSc327mS9Ym0xt2wTYQIDAQAB";
String RSAPrivateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM0wYERBPIoL7bOHYJTEQMjwzeNKlIUjAONbUksLMkJANNyUapf8DcNaxL48ysV9HF3TD2sigvHUOMXYqkmYDNQqkUe2m2by1Y8Bo+ByXnzHvMm+dhQcgxx6NeFRl+oTyodVVB41pQbGrY2f1Laz50VUn3NJzfbuZL1ibTG3bBNhAgMBAAECgYAnewFq4KqHXVg1TP0WYtScVUkoTLdbDqsjE/U3n0XiXXxOXPhNmiAD0Lk+aXASo8oLe4rh8FgFs/Hgj5nkYy9EY2B+e4nzdGkaXpLCYJQL8gYFnh+TlcJnhcKBHkQuBGORVghDWOky0bMyKxdPlO20B8AySThHaQ6k/CWjJFkMKQJBAOdlQbp//cCRImTI1GIW3ghQuqGrOtrQHnLO4My/FsW5elaqKhU3sfAAa+Tk7jWm0cdsu5OYFjvsjzmrea0Y5wsCQQDjAcJCQn275itpTtOjqLDGH0lf2AKFv+DARBDdvZNDULirzUpiMT6xHlWyIu3NXD6oRofvKiF40ADKOJPSsgLDAkEAhLM9Dod4LocNAl9p7RbQHlStsylPh0zzKUQbB1BO7vV/g1Py7lgSY2Daf1oKgho5E/T3XZ1KovL28Eu2a95sIQJAdgITD0jrfgOAa8UrpjdqdgQLq8RqQ0dlOe3oaq1DYcoTxlP5KCR7d63SVMFtp8UdWXMY9U6MifZvgrB4wB4D6wJBAILQrxAtbzMG9qD9jLBjBy6dVpMTGS2NqSUlIHz5CFdGT5d9gLMjLJ5cCovKgdzrX+pyAFmUIy7n3BFkGHtWcTs=";
JsonObject jsonContainer =new JsonObject();
//为当前的json对象添加键值对
jsonContainer.addProperty("systemCode", systemCode);
jsonContainer.addProperty("startDate", "2022-12-01 00:00:00");
jsonContainer.addProperty("finishedDate", "2022-12-31 00:00:00");
//加密
String encrypt = RsaUtil.encrypt(String.valueOf(jsonContainer), RSAPublicKey);
//解密
String decrypt = RsaUtil.decrypt(encrypt, RSAPrivateKey);
log.info(123);
}catch (Exception e){
}
// 第一次使用时获取,获取后保存公私钥,不要重复获取
//生成秘钥
Map<String, String> stringStringMap = RsaUtils.generateKeyPair();
String RSAPublicKey = stringStringMap.get(PUBLIC_KEY);
String RSAPrivateKey = stringStringMap.get(PRIVATE_KEY);
try {
InetAddress inetAddress = InetAddress.getLocalHost();
String macAddress = SystemUtil.getMacAddress(inetAddress);
//String systemCode = Md5Utils.hash(macAddress).toUpperCase();
String systemCode = "机器码";
String RSAPublicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNMGBEQTyKC+2zh2CUxEDI8M3jSpSFIwDjW1JLCzJCQDTclGqX/A3DWsS+PMrFfRxd0w9rIoLx1DjF2KpJmAzUKpFHtptm8tWPAaPgcl58x7zJvnYUHIMcejXhUZfqE8qHVVQeNaUGxq2Nn9S2s+dFVJ9zSc327mS9Ym0xt2wTYQIDAQAB";
String RSAPrivateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAM0wYERBPIoL7bOHYJTEQMjwzeNKlIUjAONbUksLMkJANNyUapf8DcNaxL48ysV9HF3TD2sigvHUOMXYqkmYDNQqkUe2m2by1Y8Bo+ByXnzHvMm+dhQcgxx6NeFRl+oTyodVVB41pQbGrY2f1Laz50VUn3NJzfbuZL1ibTG3bBNhAgMBAAECgYAnewFq4KqHXVg1TP0WYtScVUkoTLdbDqsjE/U3n0XiXXxOXPhNmiAD0Lk+aXASo8oLe4rh8FgFs/Hgj5nkYy9EY2B+e4nzdGkaXpLCYJQL8gYFnh+TlcJnhcKBHkQuBGORVghDWOky0bMyKxdPlO20B8AySThHaQ6k/CWjJFkMKQJBAOdlQbp//cCRImTI1GIW3ghQuqGrOtrQHnLO4My/FsW5elaqKhU3sfAAa+Tk7jWm0cdsu5OYFjvsjzmrea0Y5wsCQQDjAcJCQn275itpTtOjqLDGH0lf2AKFv+DARBDdvZNDULirzUpiMT6xHlWyIu3NXD6oRofvKiF40ADKOJPSsgLDAkEAhLM9Dod4LocNAl9p7RbQHlStsylPh0zzKUQbB1BO7vV/g1Py7lgSY2Daf1oKgho5E/T3XZ1KovL28Eu2a95sIQJAdgITD0jrfgOAa8UrpjdqdgQLq8RqQ0dlOe3oaq1DYcoTxlP5KCR7d63SVMFtp8UdWXMY9U6MifZvgrB4wB4D6wJBAILQrxAtbzMG9qD9jLBjBy6dVpMTGS2NqSUlIHz5CFdGT5d9gLMjLJ5cCovKgdzrX+pyAFmUIy7n3BFkGHtWcTs=";
JsonObject jsonContainer =new JsonObject();
//为当前的json对象添加键值对
jsonContainer.addProperty("systemCode", systemCode);
jsonContainer.addProperty("finishedDate", "2022-12-31 00:00:00");
//加密
String encrypt = RsaUtil.encrypt(String.valueOf(jsonContainer), RSAPublicKey);
//解密
String decrypt = RsaUtil.decrypt(encrypt1, RSAPrivateKey);
}catch (Exception e){
}
package com.ruoyi.common.utils;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import org.apache.commons.codec.binary.Base64;
import java.security.KeyPair;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.HashMap;
import java.util.Map;
public class RsaUtil {
/**
* 类型
*/
public static final String ENCRYPT_TYPE = "RSA";
/**
* 获取公钥的key
*/
public static final String PUBLIC_KEY = "RSAPublicKey";
/**
* 获取私钥的key
*/
public static final String PRIVATE_KEY = "RSAPrivateKey";
/**
* 公钥加密
* @param content 要加密的内容
* @param publicKey 公钥
*/
public static String encrypt(String content, PublicKey publicKey) {
try{
RSA rsa = new RSA(null,publicKey);
return rsa.encryptBase64(content, KeyType.PublicKey);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 公钥加密
* @param content 要加密的内容
* @param publicKey 公钥
*/
public static String encrypt(String content, String publicKey) {
try{
RSA rsa = new RSA(null,publicKey);
return rsa.encryptBase64(content, KeyType.PublicKey);
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 私钥解密
* @param content 要解密的内容
* @param privateKey 私钥
*/
public static String decrypt(String content, PrivateKey privateKey) {
try {
RSA rsa = new RSA(privateKey,null);
return rsa.decryptStr(content, KeyType.PrivateKey);
} catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 私钥解密
* @param content 要解密的内容
* @param privateKey 私钥
*/
public static String decrypt(String content, String privateKey) {
try {
RSA rsa = new RSA(privateKey,null);
return rsa.decryptStr(content, KeyType.PrivateKey);
} catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 获取公私钥-请获取一次后保存公私钥使用
* @return
*/
public static Map<String,String> generateKeyPair() {
try {
KeyPair pair = SecureUtil.generateKeyPair(ENCRYPT_TYPE);
PrivateKey privateKey = pair.getPrivate();
PublicKey publicKey = pair.getPublic();
// 获取 公钥和私钥 的 编码格式(通过该 编码格式 可以反过来 生成公钥和私钥对象)
byte[] pubEncBytes = publicKey.getEncoded();
byte[] priEncBytes = privateKey.getEncoded();
// 把 公钥和私钥 的 编码格式 转换为 Base64文本 方便保存
String pubEncBase64 = Base64.encodeBase64String(pubEncBytes);
String priEncBase64 = Base64.encodeBase64String(priEncBytes);
Map<String, String> map = new HashMap<String, String>(2);
map.put(PUBLIC_KEY,pubEncBase64);
map.put(PRIVATE_KEY,priEncBase64);
return map;
} catch (Exception e){
e.printStackTrace();
}
return null;
}
}
log.info("##Time Checking Service Running:{}",LocalDateTime.now());
String encryptMacAddress = SystemUtil.getMacAddressMd5();
if (Math.abs(datePoorDay - i1) >1){
public class SystemUtil {
public static String getMacAddressMd5() {
String encryptMacAddress = null;
String macAddress= "";
try {
RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
if (redisUtil.hasKey("pcMacAddress")){
macAddress = redisUtil.get("pcMacAddress").toString();
}else{
Map<String, Object> localInetMac = NetworkUtil.getLocalInetMac();
if (localInetMac == null){
throw new Exception("获取mac地址异常:null");
}
macAddress = localInetMac.get("mac").toString();
redisUtil.set("pcMacAddress",macAddress);
}
log.info("MAC:{}",macAddress);
encryptMacAddress = Md5Utils.hash(macAddress).toUpperCase();
} catch (Exception e) {
log.error("获取mac地址异常:{}",e.toString());
}
return encryptMacAddress;
}
_____________________________________________________________
String systemMacName = ni.getName();
log.info("address:{},canonicalHostName:{},hostAddress:{},hostName:{},displayName:{},hardwareAddress:{},systemMacName:{}",
address,
canonicalHostName,
hostAddress,
hostName,
displayName,
hardwareAddress,systemMacName);
String macAddressName = "enp2s0";
---------------------------------------------------------------------------------
public class PcActivationCodeService implements ApplicationRunner {
private final PcActivationMapper pcActivationMapper;
private RedisUtil redisUtil;
@Override
public void run(ApplicationArguments args) {
try {
redisUtil.del(URLConstant.MAC_ADDRESS_TYPE_NAME);
redisUtil.del("pcMacAddress");
redisUtil.del("pcActivation");
String encryptMacAddress = SystemUtil.getMacAddressMd5();
//查询是否有激活码
PcActivation pcActivation = pcActivationMapper.selectPcActivationSingle();
if (pcActivation != null) {