package com.encryption;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.SecureRandom;
import java.sql.Connection;
import java.util.concurrent.TimeUnit;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import java.util.Scanner;
//import org.hyperic.sigar.SigarException;
import java.lang.Runtime;
/**
 *
 * @author Administrator
 */
public class LocalInfo implements Runnable{


    /**
     * 字符串工具集合
     * @author Liudong
     */
    private static final String PASSWORD_CRYPT_KEY = "__jDlog_";
    private final static String DES = "DES";

    //定义存储本地硬件信息的字符串
    //private String encryptLocalInfoStr = "";
    private String decryptLocalInfoStr = "";
    Connection con;

    /**
     * 解密
     * @param src 数据源
     * @param key 密钥，长度必须是8的倍数
     * @return 返回解密后的原始数据
     * @throws Exception
     */
    public static byte[] decrypt(byte[] src, byte[] key)throws Exception {
        // DES算法要求有一个可信任的随机数源
        SecureRandom sr = new SecureRandom();
        // 从原始密匙数据创建一个DESKeySpec对象
        DESKeySpec dks = new DESKeySpec(key);
        // 创建一个密匙工厂，然后用它把DESKeySpec对象转换成
        // 一个SecretKey对象
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
        SecretKey securekey = keyFactory.generateSecret(dks);
        // Cipher对象实际完成解密操作
        Cipher cipher = Cipher.getInstance(DES);
        // 用密匙初始化Cipher对象
        cipher.init(Cipher.DECRYPT_MODE, securekey, sr);
        // 现在，获取数据并解密
        // 正式执行解密操作
        return cipher.doFinal(src);
    }
    /**
     * 密码解密
     * @param data
     * @return
     * @throws Exception
     */


    public final static String decrypt(String data){
        try {

            //			return new String(decrypt(hex2byte(data.getBytes()),
            //			PASSWORD_CRYPT_KEY.getBytes()));
            return new String(decrypt(hex2byte(data),
                    PASSWORD_CRYPT_KEY.getBytes()));
        }catch(Exception e) {
        }
        return null;
    }
    public static byte[] hex2byte(String strhex) {
        if (strhex == null) {
            return null;
        }
        int l = strhex.length();
        if (l % 2 == 1) {
            return null;
        }
        byte[] b = new byte[l / 2];
        for (int i = 0; i != l / 2; i++) {
            b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2),
                    16);
        }
        return b;
    }

    public static String byte2hex(byte[] b) {
        String hs = "";
        String stmp = "";
        for (int n = 0; n < b.length; n++) {
            stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));
            if (stmp.length() == 1) {
                hs = hs + "0" + stmp;
            } else {
                hs = hs + stmp;
            }
        }
        return hs.toUpperCase();
    }

    public String getLocalProcessorIdByEnc(String encryptLocalInfoStr){
        return decryptLocalInfoStr=LocalInfo.decrypt(encryptLocalInfoStr);
    }

    public String getLocalProcessorId() {
        String serial = "";
        try {
            long start = System.currentTimeMillis();
            Process process = Runtime.getRuntime().exec(new String[] { "wmic", "cpu", "get", "ProcessorId" });
            process.getOutputStream().close();
            Scanner sc = new Scanner(process.getInputStream());
            String property = sc.next();
            serial = sc.next();
            System.out.println(property + ": " + serial);
            //return serial;
        } catch (IOException e) {
            // TODO 自动生成 catch 块
            e.printStackTrace();
        }
        return serial;
    }
    public static void main(String args[]){
        //System.out.println(new LocalInfo().getLocalInfoStr() );
        //System.out.println(new LocalInfo().MacIP);
        //System.out.println(new LocalInfo().getLocalMacIP());
        //System.out.println("time:" + (System.currentTimeMillis() - start));
        LocalInfo localinfo = new LocalInfo();
        //System.out.println(localinfo.getLocalProcessorIdByEnc("620D41819F3D5C9E6D326020497B00589F1C5E5405BB3E52364E873CE6CBF9D5CE92FE4B6BE1B278"));


    }
    public void run() {
        while(true){
            try {
                //Socket socket=new Socket(ClientSystemInfo.serverIP,ClientSystemInfo.sendUpdateInfoPort );
                Socket socket=new Socket("",0);
                DataOutputStream out=new DataOutputStream(socket.getOutputStream() );
                //out.writeUTF( new LocalInfo().getLocalInfoStr());
                //out.writeUTF(new LocalInfo().getLocalMacIP());
                socket.close() ;
                out.close() ;

            } catch (UnknownHostException e) {
                // TODO 自动生成 catch 块
                e.printStackTrace();
            } catch (IOException e) {
                // TODO 自动生成 catch 块
                e.printStackTrace();
            }
            try {
                TimeUnit.MINUTES .sleep(1);
            } catch (InterruptedException e) {
                // TODO 自动生成 catch 块
                e.printStackTrace();
            }
        }
    }
}
