ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 12645|回复: 14

C#识别机器特征码及AES加密生成注册码-CPU、主板、BIOS、硬盘、Mac(可以断网)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-11-20 13:52 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 liucqa 于 2012-11-21 14:34 编辑
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.InteropServices;
  6. using System.Management;
  7. using System.Net;
  8. using System.Net.NetworkInformation;
  9. using System.Collections;

  10. //在引用中添加.NET选项卡中的System.Management类库

  11. namespace ConsoleApplication3
  12. {
  13.     class Program
  14.     {
  15.         static void Main(string[] args)
  16.         {
  17.             Console.WriteLine("计算机名:" + HInfo.MyHardwareInfo.GetHostName());  //static定义的方法,可以直接使用,耗资源
  18.             HInfo.MyHardwareInfo temp = new HInfo.MyHardwareInfo();
  19.             //Console.WriteLine("硬盘 ID:" + temp.GetHardDiskID());                //非static定义的方法,只能先new之后,再引用
  20.             //Console.WriteLine("Mac地址:" + temp.GetMacAddress());  //都需要插上网线
  21.             //Console.WriteLine("CPU ID:" + temp.GetCpuID());
  22.             Console.WriteLine("主板 ID:" + temp.GetMainBoard());
  23.             Console.WriteLine("硬盘 ID:" + temp.GetHDSN());
  24.             Console.WriteLine("BIOS ID:" + temp.GetBiosSN());
  25.             //Console.WriteLine("CPU Info: " + temp.GetCPUInfo());
  26.             //Console.WriteLine("Mac地址 Info:" + GetMacAddress.MAC.GetMACIP());
  27.             //Console.WriteLine("Local IP:" + GetMacAddress.getIP.getLocalIP());
  28.             //Console.WriteLine("Local Mac:" + GetMacAddress.getIP.getLocalMac());

  29.             ArrayList allNics = GetMacAddress.MACInfo.GetAllNic();
  30.             foreach (object Nicid in allNics)
  31.             {
  32.                 Console.WriteLine("MacInfo:" + GetMacAddress.MACInfo.GetNicAddress(Nicid.ToString()).Trim());
  33.             }
  34.             Console.ReadKey();
  35.         }
  36.     }
  37. }

  38. namespace HInfo
  39. {
  40.     public class MyHardwareInfo
  41.     {
  42.         //取机器名
  43.         public static string GetHostName()
  44.         {
  45.             return System.Net.Dns.GetHostName();
  46.         }

  47.         //取CPU编号
  48.         public String GetCpuID()
  49.         {
  50.             try
  51.             {
  52.                 ManagementClass mc = new ManagementClass("Win32_Processor");
  53.                 ManagementObjectCollection moc = mc.GetInstances();

  54.                 String strCpuID = null;
  55.                 foreach (ManagementObject mo in moc)
  56.                 {
  57.                     strCpuID = mo.Properties["ProcessorId"].Value.ToString();
  58.                     break;
  59.                 }
  60.                 return strCpuID;
  61.             }
  62.             catch
  63.             {
  64.                 return "";
  65.             }

  66.         }//end

  67.         //获取主板编号
  68.         public String GetMainBoard()
  69.         {
  70.             ManagementClass mc = new ManagementClass("Win32_BaseBoard");  
  71.             ManagementObjectCollection moc = mc.GetInstances();
  72.             string strID = null ;
  73.             foreach( ManagementObject mo in moc )
  74.             {   
  75.                 strID = mo.Properties["SerialNumber"].Value.ToString();  
  76.                 break;
  77.             }
  78.             return  strID ;   
  79.         }//End

  80.         //获取主板编号
  81.         public String GetBiosSN()
  82.         {
  83.             ManagementClass mc = new ManagementClass("Win32_BIOS");
  84.             ManagementObjectCollection moc = mc.GetInstances();
  85.             string strID = null ;   
  86.             foreach( ManagementObject mo in moc )
  87.             {   
  88.                 strID = mo.Properties["SerialNumber"].Value.ToString();
  89.                 break;  
  90.             }
  91.             return strID;
  92.         }//End

  93.         //获取CPU的全部信息
  94.         public String GetCPUInfo()
  95.         {
  96.             ManagementClass mc = new ManagementClass("Win32_Processor");
  97.             ManagementObjectCollection moc = mc.GetInstances();
  98.             string temp = null;
  99.             foreach (ManagementObject mo in moc)
  100.             {
  101.                 temp += "\r\n============CUP信息============";
  102.                 foreach (PropertyData pd in mo.Properties)
  103.                 {
  104.                     temp += "\r\n" + pd.Name + "\t";
  105.                     if (pd.Value != null)
  106.                     {
  107.                         temp += pd.Value.ToString();
  108.                     }
  109.                 }
  110.                 temp += "\r\n\r\n========================";
  111.             }
  112.             return temp;
  113.         }//End

  114.         //获取硬盘编号
  115.         public String GetHDSN()
  116.         {
  117.             ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");
  118.             //网上有提到,用Win32_DiskDrive,但是用Win32_DiskDrive获得的硬盘信息中并不包含SerialNumber属性。  
  119.             ManagementObjectCollection moc = mc.GetInstances();
  120.             string strID = null;
  121.             foreach (ManagementObject mo in moc)
  122.             {
  123.                 strID = mo.Properties["SerialNumber"].Value.ToString().Trim();
  124.                 break;
  125.             }
  126.             return strID;
  127.         }//End

  128.         //取第一块硬盘编号
  129.         public String GetHardDiskID()
  130.         {
  131.             try
  132.             {
  133.                 ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
  134.                 String strHardDiskID = null;
  135.                 foreach (ManagementObject mo in searcher.Get())
  136.                 {
  137.                     strHardDiskID = mo["SerialNumber"].ToString().Trim();
  138.                     break;
  139.                 }
  140.                 return strHardDiskID;
  141.             }
  142.             catch
  143.             {
  144.                 return "";
  145.             }
  146.         }//end

  147.         public enum NCBCONST
  148.         {
  149.             NCBNAMSZ = 16, /* absolute length of a net name */
  150.             MAX_LANA = 254, /* lana's in range 0 to MAX_LANA inclusive */
  151.             NCBENUM = 0x37, /* NCB ENUMERATE LANA NUMBERS */
  152.             NRC_GOODRET = 0x00, /* good return */
  153.             NCBRESET = 0x32, /* NCB RESET */
  154.             NCBASTAT = 0x33, /* NCB ADAPTER STATUS */
  155.             NUM_NAMEBUF = 30, /* Number of NAME's BUFFER */
  156.         }

  157.         [StructLayout(LayoutKind.Sequential)]
  158.         public struct ADAPTER_STATUS
  159.         {
  160.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
  161.             public byte[] adapter_address;
  162.             public byte rev_major;
  163.             public byte reserved0;
  164.             public byte adapter_type;
  165.             public byte rev_minor;
  166.             public ushort duration;
  167.             public ushort frmr_recv;
  168.             public ushort frmr_xmit;
  169.             public ushort iframe_recv_err;
  170.             public ushort xmit_aborts;
  171.             public uint xmit_success;
  172.             public uint recv_success;
  173.             public ushort iframe_xmit_err;
  174.             public ushort recv_buff_unavail;
  175.             public ushort t1_timeouts;
  176.             public ushort ti_timeouts;
  177.             public uint reserved1;
  178.             public ushort free_ncbs;
  179.             public ushort max_cfg_ncbs;
  180.             public ushort max_ncbs;
  181.             public ushort xmit_buf_unavail;
  182.             public ushort max_dgram_size;
  183.             public ushort pending_sess;
  184.             public ushort max_cfg_sess;
  185.             public ushort max_sess;
  186.             public ushort max_sess_pkt_size;
  187.             public ushort name_count;
  188.         }

  189.         [StructLayout(LayoutKind.Sequential)]
  190.         public struct NAME_BUFFER
  191.         {
  192.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
  193.             public byte[] name;
  194.             public byte name_num;
  195.             public byte name_flags;
  196.         }

  197.         [StructLayout(LayoutKind.Sequential)]
  198.         public struct NCB
  199.         {
  200.             public byte ncb_command;
  201.             public byte ncb_retcode;
  202.             public byte ncb_lsn;
  203.             public byte ncb_num;
  204.             public IntPtr ncb_buffer;
  205.             public ushort ncb_length;
  206.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
  207.             public byte[] ncb_callname;
  208.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
  209.             public byte[] ncb_name;
  210.             public byte ncb_rto;
  211.             public byte ncb_sto;
  212.             public IntPtr ncb_post;
  213.             public byte ncb_lana_num;
  214.             public byte ncb_cmd_cplt;
  215.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
  216.             public byte[] ncb_reserve;
  217.             public IntPtr ncb_event;
  218.         }

  219.         [StructLayout(LayoutKind.Sequential)]
  220.         public struct LANA_ENUM
  221.         {
  222.             public byte length;
  223.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.MAX_LANA)]
  224.             public byte[] lana;
  225.         }

  226.         [StructLayout(LayoutKind.Auto)]
  227.         public struct ASTAT
  228.         {
  229.             public ADAPTER_STATUS adapt;
  230.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NUM_NAMEBUF)]
  231.             public NAME_BUFFER[] NameBuff;
  232.         }
  233.         public class Win32API
  234.         {
  235.             [DllImport("NETAPI32.DLL")]
  236.             public static extern char Netbios(ref NCB ncb);
  237.         }

  238.         //取网卡mac
  239.         public string GetMacAddress()
  240.         {
  241.             string addr = "";
  242.             try
  243.             {
  244.                 int cb;
  245.                 ASTAT adapter;
  246.                 NCB Ncb = new NCB();
  247.                 char uRetCode;
  248.                 LANA_ENUM lenum;

  249.                 Ncb.ncb_command = (byte)NCBCONST.NCBENUM;
  250.                 cb = Marshal.SizeOf(typeof(LANA_ENUM));
  251.                 Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
  252.                 Ncb.ncb_length = (ushort)cb;
  253.                 uRetCode = Win32API.Netbios(ref Ncb);
  254.                 lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
  255.                 Marshal.FreeHGlobal(Ncb.ncb_buffer);
  256.                 if (uRetCode != (short)NCBCONST.NRC_GOODRET)
  257.                     return "";

  258.                 for (int i = 0; i < lenum.length; i++)
  259.                 {
  260.                     Ncb.ncb_command = (byte)NCBCONST.NCBRESET;
  261.                     Ncb.ncb_lana_num = lenum.lana[i];
  262.                     uRetCode = Win32API.Netbios(ref Ncb);
  263.                     if (uRetCode != (short)NCBCONST.NRC_GOODRET)
  264.                         return "";

  265.                     Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;
  266.                     Ncb.ncb_lana_num = lenum.lana[i];
  267.                     Ncb.ncb_callname[0] = (byte)'*';
  268.                     cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF;
  269.                     Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
  270.                     Ncb.ncb_length = (ushort)cb;
  271.                     uRetCode = Win32API.Netbios(ref Ncb);
  272.                     adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));
  273.                     Marshal.FreeHGlobal(Ncb.ncb_buffer);

  274.                     if (uRetCode == (short)NCBCONST.NRC_GOODRET)
  275.                     {
  276.                         if (i > 0)
  277.                             addr += ":";
  278.                         addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",
  279.                         adapter.adapt.adapter_address[0],
  280.                         adapter.adapt.adapter_address[1],
  281.                         adapter.adapt.adapter_address[2],
  282.                         adapter.adapt.adapter_address[3],
  283.                         adapter.adapt.adapter_address[4],
  284.                         adapter.adapt.adapter_address[5]);
  285.                     }
  286.                 }
  287.             }
  288.             catch
  289.             {
  290.             }
  291.             return addr.Replace(' ', '0');
  292.         }
  293.     }
  294. }

  295. namespace GetMacAddress
  296. {
  297.     class MAC
  298.     {
  299.         [STAThread]
  300.         public static string GetMACIP()
  301.         {
  302.             string mac = "";
  303.             ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  304.             ManagementObjectCollection moc = mc.GetInstances();
  305.             foreach (ManagementObject mo in moc)
  306.             {
  307.                 if (mo["IPEnabled"].ToString() == "True")
  308.                 {
  309.                     mac = mo["MacAddress"].ToString();
  310.                 }
  311.             }
  312.             return mac.ToString();
  313.         }
  314.     }
  315.    
  316.     class MACInfo
  317.     {
  318.         [DllImport("kernel32.dll", SetLastError = true)]
  319.         public static extern bool DeviceIoControl(
  320.             IntPtr HDevice,
  321.             uint dwIoControlCode,
  322.             IntPtr lpInBuffer,
  323.             uint nInBufferSize,
  324.             IntPtr lpOutBuffer,
  325.             uint nOutBufferSize,
  326.             ref uint lpBytesReturned,
  327.             IntPtr lpOverlapped);


  328.         [DllImport("kernel32.dll", SetLastError = true)]
  329.         [return: MarshalAs(UnmanagedType.Bool)]
  330.         public static extern bool CloseHandle(IntPtr hObject);

  331.         [DllImport("kernel32.dll", SetLastError = true)]
  332.         public static extern IntPtr CreateFile(
  333.             string lpFileName,
  334.             uint dwDesiredAccess,
  335.             uint dwShareMode,
  336.             IntPtr lpSecurityAttributes,
  337.             uint dwCreationDisposition,
  338.             uint dwFlagsAndAttributes,
  339.             IntPtr hTemplateFile);


  340.         public static string GetNicAddress(string NicId)
  341.         {
  342.             System.IntPtr hDevice = CreateFile("\\\\.\" + NicId,
  343.                                                 0x80000000 | 0x40000000,
  344.                                                 0,
  345.                                                 IntPtr.Zero,
  346.                                                 3,
  347.                                                 4,
  348.                                                 IntPtr.Zero
  349.                                                 );

  350.             if (hDevice.ToInt32() == -1)
  351.             {
  352.                 return null;
  353.             }

  354.             uint Len = 0;
  355.             IntPtr Buffer = Marshal.AllocHGlobal(256);

  356.             Marshal.WriteInt32(Buffer, 0x01010101);

  357.             if (!DeviceIoControl(hDevice,
  358.                               0x170002,
  359.                               Buffer,
  360.                               4,
  361.                               Buffer,
  362.                               256,
  363.                               ref Len,
  364.                               IntPtr.Zero))
  365.             {

  366.                 Marshal.FreeHGlobal(Buffer);
  367.                 CloseHandle(hDevice);
  368.                 return null;

  369.             }

  370.             byte[] macBytes = new byte[6];
  371.             Marshal.Copy(Buffer, macBytes, 0, 6);

  372.             Marshal.FreeHGlobal(Buffer);
  373.             CloseHandle(hDevice);
  374.             return new System.Net.NetworkInformation.PhysicalAddress(macBytes).ToString();


  375.         }
  376.         //以下函数获取本机所有的以太网卡的ID
  377.         public static ArrayList GetAllNic()
  378.         {
  379.             NetworkInterface[] Nics = NetworkInterface.GetAllNetworkInterfaces();
  380.             System.Collections.ArrayList EtherNics = new ArrayList(20);

  381.             foreach (NetworkInterface nic in Nics)
  382.             {
  383.                 if (nic.NetworkInterfaceType == NetworkInterfaceType.Ethernet && !nic.Name.Contains("Bluetooth"))  //Wireless80211,无线
  384.                 //if (nic.NetworkInterfaceType.ToString().Equals("Ethernet")) //会把蓝牙找出来
  385.                 {
  386.                     EtherNics.Add(nic.Id);
  387.                 }
  388.             }
  389.             return EtherNics;
  390.         }


  391.     }
  392. }
复制代码

C#识别机器特征码,作废的代码不少,请自行删除。


TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-20 13:56 | 显示全部楼层
本帖最后由 liucqa 于 2012-11-21 14:44 编辑

CallingCodeFromVBA-3DES.rar (686.33 KB, 下载次数: 341)
通过硬盘特征码生成AES加密字符串、以及通过解密的特征码Hash得到注册码的演示

捕获.JPG

例子中演示了:
1、获取机器特征码
2、通过RijndaelManaged 类生成AES加密的密文,并转成Base64方便查看
3、通过机器特征码,hash出可以用作注册码的字符串(可选SHA1、SHA256等)


例子中还带有3DES加解密的演示。

代码中有多个3DES加解密测试的过程,没有删除,请自行处理。

AES类如下,http://blog.wahahajk.com/2008/08/c-demo-aes-3des.html,修改成256位密钥,并经Base64编码
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Security.Cryptography;


  6. class AES
  7. {//加密函式
  8.     public string encrypt(string string_secretContent, string string_pwd)
  9.     {
  10.         //密碼轉譯一定都是用byte[] 所以把string都換成byte[]
  11.         byte[] byte_secretContent = Encoding.UTF8.GetBytes(string_secretContent);
  12.         byte[] byte_pwd = Encoding.UTF8.GetBytes(string_pwd);

  13.         //加解密函數的key通常都會有固定的長度 而使用者輸入的key長度不定 因此用hash過後的值當做key
  14.         MD5CryptoServiceProvider provider_MD5 = new MD5CryptoServiceProvider();
  15.         //MD5CryptoServiceProvider 类的 ComputeHash 方法将哈希作为 16 字节的数组返回。
  16.         byte[] byte_pwdMD5 = provider_MD5.ComputeHash(byte_pwd);
  17.                
  18.         StringBuilder sBuilder = new StringBuilder();
  19.         for (int i = 0; i < byte_pwdMD5.Length; i++)
  20.         {
  21.             sBuilder.Append(byte_pwdMD5[i].ToString("x2"));        //32位字符串
  22.         }
  23.         byte_pwdMD5 = HexStringToByteArray1(sBuilder.ToString());  //规格化成256位,即32个数的数组


  24.         //產生加密實體 如果要用其他不同的加解密演算法就改這裡(ex:3DES)
  25.         //.NET中默认实现了4种对称加密算法:DES、TripleDES、RC2、Rijndeal
  26.         //Rijndael算是AES比較有彈性的版本 因此在.net中要使用AES加密就用RijndaelManaged類
  27.         //此算法支持 128、192 或 256 位的密钥长度
  28.         RijndaelManaged provider_AES = new RijndaelManaged();
  29.         provider_AES.BlockSize =256;                              //对应前面的密钥长度
  30.         ICryptoTransform encrypt_AES = provider_AES.CreateEncryptor(byte_pwdMD5, byte_pwdMD5);

  31.         //output就是加密過後的結果
  32.         byte[] output = encrypt_AES.TransformFinalBlock(byte_secretContent, 0, byte_secretContent.Length);
  33.         return Convert.ToBase64String(output);
  34.     }

  35.     //解密函式
  36.     public string decrypt(string byte_ciphertext, string string_pwd)
  37.     {
  38.         //密碼轉譯一定都是用byte[] 所以把string都換成byte[]
  39.         byte[] byte_pwd = Encoding.UTF8.GetBytes(string_pwd);

  40.         //加解密函數的key通常都會有固定的長度 而使用者輸入的key長度不定 因此用hash過後的值當做key
  41.         MD5CryptoServiceProvider provider_MD5 = new MD5CryptoServiceProvider();
  42.         byte[] byte_pwdMD5 = provider_MD5.ComputeHash(byte_pwd);

  43.         StringBuilder sBuilder = new StringBuilder();
  44.         for (int i = 0; i < byte_pwdMD5.Length; i++)
  45.         {
  46.             sBuilder.Append(byte_pwdMD5[i].ToString("x2"));
  47.         }
  48.         byte_pwdMD5 = HexStringToByteArray1(sBuilder.ToString());  //规格化成32大小数组

  49.         //產生解密實體
  50.         RijndaelManaged provider_AES = new RijndaelManaged();
  51.         provider_AES.BlockSize = 256;
  52.         ICryptoTransform decrypt_AES = provider_AES.CreateDecryptor(byte_pwdMD5, byte_pwdMD5);

  53.         //string_secretContent就是解密後的明文
  54.         byte[] Buffer = Convert.FromBase64String(byte_ciphertext);
  55.         byte[] byte_secretContent = decrypt_AES.TransformFinalBlock(Buffer, 0, Buffer.Length);
  56.         string string_secretContent = Encoding.UTF8.GetString(byte_secretContent);
  57.         return string_secretContent;
  58.     }

  59.     //生成16个大写字母+数字的哈希值
  60.     public string RegCode16r(String str)
  61.     {
  62.         //return HashSHA512(str).Substring(4, 16);
  63.         string strRegCode = HashSHA1(str);
  64.         return strRegCode.Substring(4,4)+ "-" +strRegCode.Substring(8,4)+ "-" +strRegCode.Substring(12,4)+ "-" +strRegCode.Substring(16,4);
  65.     }

  66.     private string HashSHA512(string strPlain)
  67.     {
  68.         //SHA1Managed(160位)、SHA256Managed、SHA384Managed、SHA512Managed
  69.         SHA512Managed sha512 = new SHA512Managed();
  70.         string strHash = string.Empty;
  71.         byte[] btHash = sha512.ComputeHash(UnicodeEncoding.Unicode.GetBytes(strPlain));

  72.         StringBuilder sBuilder = new StringBuilder();
  73.         for (int i = 0; i < btHash.Length; i++)
  74.         {
  75.             sBuilder.Append(btHash[i].ToString("X2"));
  76.         }
  77.        return sBuilder.ToString();

  78.         /*for (int i = 0; i < btHash.Length; i++)
  79.         {
  80.             strHash = strHash + Convert.ToString(btHash[i], 16);
  81.         }
  82.         return strHash;*/
  83.     }

  84.     private string HashSHA1(string strPlain)
  85.     {
  86.         //SHA1Managed(160位)
  87.         SHA1 sha1 = new SHA1Managed();
  88.         string strHash = string.Empty;
  89.         byte[] btHash = sha1.ComputeHash(UnicodeEncoding.Unicode.GetBytes(strPlain));

  90.         StringBuilder sBuilder = new StringBuilder();
  91.         for (int i = 0; i < btHash.Length; i++)
  92.         {
  93.             sBuilder.Append(btHash[i].ToString("X2"));
  94.         }
  95.         return sBuilder.ToString();
  96.     }

  97.     private static byte[] HexStringToByteArray(string str)
  98.     {
  99.         int l = str.Length;
  100.         int bytelen = l / 2;
  101.         //bytelen = 24;
  102.         byte[] bytes = new byte[bytelen];
  103.         int ii = bytes.Length;
  104.         string buf = str.ToLower();


  105.         for (int i = 0; i < buf.Length; i += 2)
  106.         {
  107.             char left = buf.ToCharArray()[i];
  108.             char right = buf.ToCharArray()[i + 1];
  109.             int index = i / 2;

  110.             if (left < 'a')
  111.             {
  112.                 bytes[index] = (byte)((left - '0') << 4);
  113.             }
  114.             else
  115.             {
  116.                 bytes[index] = (byte)((left - 'a' + 10) << 4);
  117.             }
  118.             if (right < 'a')
  119.             {
  120.                 bytes[index] += (byte)(right - '0');
  121.             }
  122.             else
  123.             {
  124.                 bytes[index] += (byte)(right - 'a' + 10);
  125.             }
  126.         }
  127.         return bytes;
  128.     }
  129.     private static byte[] HexStringToByteArray1(string strHexString)
  130.     {
  131.         int len = strHexString.Length;

  132.         if (len == 0)  throw new Exception("HexString 字符出错!!");
  133.         //int byteLen = len ;
  134.         byte[] bytes = new byte[len];
  135.         for (int i = 0; i < len; i++)
  136.         {
  137.             bytes[i] = Convert.ToByte(strHexString.Substring(i , 1), 16);
  138.         }
  139.         return bytes;
  140.     }
  141. }
复制代码

publish.rar (290.49 KB, 下载次数: 328)
发布版,特征码中去除虚拟网卡和Bios版本号。

TA的精华主题

TA的得分主题

发表于 2012-11-20 14:07 | 显示全部楼层
不错,可不可以利用如硬盘号来做程序的许可证呢?

点评

当然可以,所有人搞这个特征码不都是为了授权用的嘛  发表于 2012-11-20 17:41

TA的精华主题

TA的得分主题

发表于 2012-11-20 14:12 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不错的东西……谢谢分享

TA的精华主题

TA的得分主题

发表于 2012-11-20 14:16 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-21 14:41 | 显示全部楼层
zm0115 发表于 2012-11-20 14:07
不错,可不可以利用如硬盘号来做程序的许可证呢?

看2楼,将生成的注册码作为VSTO函数的参数送给VSTO,即可识别合法的授权用户。

TA的精华主题

TA的得分主题

发表于 2013-11-26 11:19 | 显示全部楼层
本帖最后由 mjzxlmg 于 2013-11-28 00:23 编辑
liucqa 发表于 2012-11-21 14:41
看2楼,将生成的注册码作为VSTO函数的参数送给VSTO,即可识别合法的授权用户。


C#代码:
object[] attrs = ass.GetCustomAttributes(typeof(System.Runtime.InteropServices.GuidAttribute), false);
Guid AssemblyInfoid = new Guid(((System.Runtime.InteropServices.GuidAttribute)attrs[0]).Value);

改为VB.NET不成功,应如何修改?
Dim attrs() As Object = Ass.GetCustomAttributes(TypeOf (System.Runtime.InteropServices.GuidAttribute), False)
Dim AssemblyInfoid As Guid = New Guid(((System.Runtime.InteropServices.GuidAttribute(attrs(0)).Value)))



通过网上转换解决:
Dim attrs As Object() = ass.GetCustomAttributes(GetType(System.Runtime.InteropServices.GuidAttribute), False)
Dim AssemblyInfoid As New Guid(DirectCast(attrs(0), System.Runtime.InteropServices.GuidAttribute).Value)


vb.net和C#转换网站
http://www.dotnetspider.com/convert/CSharp-To-Vb.aspx

点评

不会vb  发表于 2013-11-26 11:43

TA的精华主题

TA的得分主题

发表于 2013-10-11 10:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-11-25 22:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
不错的东西……谢谢分享

TA的精华主题

TA的得分主题

发表于 2013-11-23 22:34 | 显示全部楼层
能否做成VB.NET的代码。C#的看不懂呀。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 00:57 , Processed in 0.056022 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表