1. 程式人生 > >java獲取mac和機器碼,註冊碼的實現、CPU序列號

java獲取mac和機器碼,註冊碼的實現、CPU序列號

CPU序列號:

  1. package test;  
  2. import java.io.IOException;  
  3. import java.util.Scanner;  
  4. publicclass CPUTest {  
  5.     /** 
  6.      * @param args 
  7.      * @throws IOException  
  8.      */
  9.     publicstaticvoid main(String[] args) throws IOException {  
  10.         // TODO Auto-generated method stub
  11.         long start = System.currentTimeMillis();  
  12.         Process process = Runtime.getRuntime().exec(  
  13.                 new String[] { "wmic""cpu""get""ProcessorId" });  
  14.         process.getOutputStream().close();  
  15.         Scanner sc = new Scanner(process.getInputStream());  
  16.         String property = sc.next();  
  17.         String serial = sc.next();  
  18.         System.out.println(property + ": " + serial);  
  19.         System.out.println("time:" + (System.currentTimeMillis() - start));  
  20.     }  
  21. }  

  結果輸出是這樣的   

          其實就是用Runtime.getRuntime().exec 執行一個指令而已。。

      想知道結果是否是準確的 , 可以在DOS下面測試  首先windows鍵+R鍵 開啟執行框 ,然後輸入cmd 開啟DOS 。然後輸入   wmic cpu get ProcessorId   

      這次的結果任然是    

      Runtime.getRuntime().exec 真的很強大啊,直接可以取得當前JVM的執行時環境,然後通過exec執行傳入的命令引數,Runtime.exec還可以做其他的事情,比如說直接開啟一個檔案。。不過在這裡我就不在做了,有興趣的小夥伴可以自己去試試看。。。

轉載自:https://blog.csdn.net/y353027520dx/article/details/42494721

package util;
import java.net.NetworkInterface;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Properties;
import java.util.Set;
import org.hyperic.sigar.NetFlags;
import org.hyperic.sigar.NetInterfaceConfig;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.springframework.security.authentication.encoding.Md5PasswordEncoder;

/**
 * java獲取mac和機器碼,註冊碼的實現
 * 
 */
public class AuthorizationUtils {
	private static final int SPLITLENGTH = 4;
	private static final String SALT = "yunshouhu";

	public static void main(String args[]) throws Exception {
		String code = getMachineCode();

		System.out.println("code:" + code);

		String authCode = auth(code);
		System.out.println("機器碼:" + code);
		System.out.println("註冊碼:" + authCode);

		// System.out.println("mac:"+getMac());
		// System.out.println("mac2:"+getMac2());

	}

	private static String getMachineCode() {
		Set<String> result = new HashSet<>();
		String mac = getMac();
		System.out.println("mac:" + getMac());
		result.add(mac);
		Properties props = System.getProperties();
		String javaVersion = props.getProperty("java.version");
		result.add(javaVersion);
		// System.out.println("Java的執行環境版本:    " + javaVersion);
		String javaVMVersion = props.getProperty("java.vm.version");
		result.add(javaVMVersion);
		// System.out.println("Java的虛擬機器實現版本:    " +
		// props.getProperty("java.vm.version"));
		String osVersion = props.getProperty("os.version");
		result.add(osVersion);
		// System.out.println("作業系統的版本:    " + props.getProperty("os.version"));

		String code = new Md5PasswordEncoder().encodePassword(
				result.toString(), SALT);
		return getSplitString(code, "-", 4);

	}

	// 使用hyperic-sigar獲取mac
	private static String getMac2() throws SigarException {
		Sigar sigar = new Sigar();
		String[] ifaces = sigar.getNetInterfaceList();
		for (String iface : ifaces) {
			NetInterfaceConfig cfg = sigar.getNetInterfaceConfig(iface);
			if (NetFlags.LOOPBACK_ADDRESS.equals(cfg.getAddress())
					|| (cfg.getFlags() & NetFlags.IFF_LOOPBACK) != 0
					|| NetFlags.NULL_HWADDR.equals(cfg.getHwaddr())) {
				continue;
			}
			String mac = cfg.getHwaddr();
			return mac;
		}
		return null;

	}

	public static String auth(String machineCode) {
		String newCode = "([email protected])["
				+ machineCode.toUpperCase() + "](xxx應用級產品開發平臺)";
		String code = new Md5PasswordEncoder().encodePassword(newCode, SALT)
				.toUpperCase() + machineCode.length();
		return getSplitString(code);
	}

	private static String getSplitString(String str) {
		return getSplitString(str, "-", SPLITLENGTH);
	}

	private static String getSplitString(String str, String split, int length) {
		int len = str.length();
		StringBuilder temp = new StringBuilder();
		for (int i = 0; i < len; i++) {
			if (i % length == 0 && i > 0) {
				temp.append(split);
			}
			temp.append(str.charAt(i));
		}
		String[] attrs = temp.toString().split(split);
		StringBuilder finalMachineCode = new StringBuilder();
		for (String attr : attrs) {
			if (attr.length() == length) {
				finalMachineCode.append(attr).append(split);
			}
		}
		String result = finalMachineCode.toString().substring(0,
				finalMachineCode.toString().length() - 1);
		return result;
	}

	public static String bytesToHexString(byte[] src) {
		StringBuilder stringBuilder = new StringBuilder("");
		if (src == null || src.length <= 0) {
			return null;
		}
		for (int i = 0; i < src.length; i++) {
			int v = src[i] & 0xFF;
			String hv = Integer.toHexString(v);
			if (hv.length() < 2) {
				stringBuilder.append(0);
			}
			stringBuilder.append(hv);
		}
		return stringBuilder.toString();
	}

	// ‎00-24-7E-0A-22-93
	private static String getMac() {
		try {
			Enumeration<NetworkInterface> el = NetworkInterface
					.getNetworkInterfaces();
			while (el.hasMoreElements()) {
				byte[] mac = el.nextElement().getHardwareAddress();
				if (mac == null)
					continue;

				String hexstr = bytesToHexString(mac);
				return getSplitString(hexstr, "-", 2).toUpperCase();

			}
		} catch (Exception exception) {
			exception.printStackTrace();
		}
		return null;
	}
}
轉自:https://blog.csdn.net/earbao/article/details/41484691

相關推薦

java獲取mac機器註冊實現CPU序列

CPU序列號:package test;  import java.io.IOException;  import java.util.Scanner;  publicclass CPUTest {      /**      * @param args      * @th

Java 獲取IP機器

1. 通過IP獲取機器名 or 通過機器名獲取ip     host :主機       hostAddress :ip       hostName:機器名 import java.net.InetAddress; import java.net.UnknownHost

c#中如何獲取本機MAC地址IP地址硬盤IDCPU序列等系統信息

finall ipaddress reac 地址 computer mod urn aca rop public class Computer { public static string CpuID; //1.cpu序列號 pub

C#/VB.NET 獲取電腦屬性(硬盤ID硬盤容量Cpu序列MAC地址系統類型)

mic class network pcm .cn bbb alt OS -h 原文:C#/VB.NET 獲取電腦屬性(硬盤ID、硬盤容量、Cpu序列號、MAC地址、系統類型)在開發過程中,經常需要獲取電腦的一些屬性,如獲取硬盤ID/CPU序列號/MAC地址作為來加密字符串

使用IPMi獲取伺服器的硬體資訊如風扇轉速cpu

開啟IPMI模組 IPMI是伺服器的智慧化管理平臺介面,我們要通過這個介面獲取所有的硬體資訊以及控制伺服器開關機。 使用IPMI的前提是伺服器支援IPMI即帶有BMC的硬體模組,將網線接到BMC模組就可以使用了(具體找運維....)。 IPMI模組配置好以後在瀏覽器中輸

c#中如何獲取本機MAC地址IP地址硬碟IDCPU序列等系統資訊

       我們在利用C#開發桌面程式(Winform)程式的時候,經常需要獲取一些跟系統相關的資訊,例如使用者名稱、MAC地址、IP地址、硬碟ID、CPU序列號、系統名稱、實體記憶體等。 首先需要引入名稱空間: using System.Management;

java獲取CPU序列生成機器

用於生成機器碼感覺用mac不靠譜,因為mac能改,(除CPU序列號外,還可以獲得主機板序列號。)Java程式碼  public static void main(String[] args) {      // TODO Auto-generated method stub 

Python下的資料處理機器學習對資料線上及本地獲取解析預處理訓練預測交叉驗證視覺化

<!doctype html> <html> <head> <title>Example Domain</title> <meta charset="utf-8" /> <meta http-equiv=

Xshell5 註冊 ,Xftp5 註冊Xmanager5註冊

strong xftp5 str manage bsp shell xshell5 ftp manager Xshell 5 註冊碼: 690313-111999-999313Xftp 5 註冊碼:101210-450789-147200 Xmanager 5 註冊碼:10

java 獲取requestresponse的一種方法

requestjava獲取request和response:HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();//獲取res

補碼Java中數字表示方法

進行 負數 java ava 一位 進制 數字 反碼 二進制 原碼:原碼是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值. 如:如果是八位二進制1即用00000001表示,-1即用10000001表示。 反碼:正數的反碼就是其本身,負數的反碼是在其原碼的基礎上

EasyRecovery for mac 13破解版 附註冊Mac資料恢復軟體

EasyRecovery for mac是由Kroll Ontrack出品的一款操作安全、價效比高、使用者自主操作的資料恢復軟體。支援從各式的儲存介質恢復刪除或者丟失的檔案,能夠恢復硬碟資料、Mac資料、U盤資料、行動硬碟資料、相機資料、手機資料、光碟資料、電子郵件等。 EasyRecovery for m

webstorm mac使用破解補丁 無需註冊

本問出自: http://blog.csdn.net/wyk304443164 本文只會教 http://idea.lanyus.com/ 內:破解補丁無需使用註冊碼 的教程 將“0.0.0.0 account.jetbrains.com”新增到host

Java的陣列list升序降序逆序函式Collections.sortArrays.sort的使用

list升序,降序,逆序List<Integer>list =new ArrayList<Integer>();//如果list是 5 7 2 6 8 1 41、升序:Collections.sort(list) //list: 1 2 4 5 6 7 82、降序:Collection

charles破解啟用方法註冊

1  最簡單的,就是買一個啟用碼,在網上找到一個,記錄一下。 // Charles Proxy License // 適用於Charles任意版本的註冊碼,誰還會想要使用破解版呢。 // Charles 4.2目

關於Java獲取Tomcat7Tomcat8根目錄路徑webapps的不同

專案需要用到上傳功能,所以想把上傳後的圖片儲存在Tomcat的根目錄下,發現Tomcat和Tomcat獲取根目錄有所不同,特此記錄。 Java獲取Tomcat根目錄示例程式碼如下 private HttpServletRequest request = Ser

java語言基礎回顧(二)--位運算以及原補碼

原碼,反碼,補碼簡介 *原碼 二進位制的定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。 例:通過一個位元組表示 +7 原碼:0(符號位) 0000111 -7原碼:1(符號位) 0000111 *反碼 正數的反碼與原碼一樣

關於原補碼左右移位的若干思考

1.為什麼要使用原碼,反碼,補碼 1)負數二進位制怎麼表示? 答:在原碼中,高位為1就表示負數 2)計算機如何實現減法? 1-1=? 答:對於計算機,邏輯運算應該設計的簡單,1-1可以表示為1+(-1),故沒有減法,用加法實現減法。 1 - 1 = 1 + (-1)

java獲取GETPOST請求引數

一 獲取請求方式 request.getMethod();    get和post都可用, 二 獲取請求型別 request.getContentType();   get和post都可用,示例值:application/json ,multipart/form-data, application/x

Java8 運算子(進位制與轉換補碼位運算詳解運算子的優先順序)

進位制  binary:  1 -> 10 -> 11 -> 100  每次從後面進一位 octal:  7-> 10    八進位制是0-7之間,底數為8的計算 hexadecimal:A