C#实现生成mac地址与IP地址注册码的两种方法
作者:shichen2014 发布时间:2022-07-14 20:14:58
标签:C#,生成,注册码
本文实例讲述了C#实现生成mac地址与IP地址注册码的两种方法,分享给大家供大家参考之用。具体方法如下:
方法一:
using System;
using System.Management;
using System.Security.Cryptography;
using System.IO;
using System.Collections.Generic;
using System.Text;
namespace xingming_reg
{
class Program
{
static void Main(string[] args)
{
bool sucsess = false;
string computerbit = "";
regmutou reg = new regmutou();
computerbit = reg.getcomputerbit("X");
sucsess = reg.regmutousoft(computerbit, "xinmin", "xinmin.usr");
Console.WriteLine(sucsess);
Console.ReadLine();
}
}
internal class regmutou
{
// Methods
public string GetBIOSSerialNumber()
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_BIOS");
string str = "";
foreach (ManagementObject obj2 in searcher.Get())
{
str = obj2["SerialNumber"].ToString().Trim();
}
return str;
}
catch
{
return "";
}
}
public string getcomputerbit(string softname)
{
string cpuID = this.GetCpuID();
string bIOSSerialNumber = this.GetBIOSSerialNumber();
string hardDiskSerialNumber = this.GetHardDiskSerialNumber();
string netCardMACAddress = this.GetNetCardMACAddress();
if (cpuID != "")
{
MD5 md = new MD5CryptoServiceProvider();
cpuID = BitConverter.ToString(md.ComputeHash(Encoding.Default.GetBytes(cpuID))).Replace("-", "").ToUpper().Substring(8, 0x10);
return (softname + "C" + cpuID);
}
if (bIOSSerialNumber != "")
{
MD5 md2 = new MD5CryptoServiceProvider();
bIOSSerialNumber = BitConverter.ToString(md2.ComputeHash(Encoding.Default.GetBytes(bIOSSerialNumber))).Replace("-", "").ToUpper().Substring(8, 0x10);
return (softname + "B" + bIOSSerialNumber);
}
if (hardDiskSerialNumber != "")
{
MD5 md3 = new MD5CryptoServiceProvider();
hardDiskSerialNumber = BitConverter.ToString(md3.ComputeHash(Encoding.Default.GetBytes(hardDiskSerialNumber))).Replace("-", "").ToUpper().Substring(8, 0x10);
return (softname + "H" + hardDiskSerialNumber);
}
if (netCardMACAddress != "")
{
MD5 md4 = new MD5CryptoServiceProvider();
netCardMACAddress = BitConverter.ToString(md4.ComputeHash(Encoding.Default.GetBytes(netCardMACAddress))).Replace("-", "").ToUpper().Substring(8, 0x10);
return (softname + "N" + netCardMACAddress);
}
return (softname + "WF53A419DB238BBAD");
}
public string GetCpuID()
{
try
{
ManagementObjectCollection instances = new ManagementClass("Win32_Processor").GetInstances();
string str = null;
foreach (ManagementObject obj2 in instances)
{
str = obj2.Properties["ProcessorId"].Value.ToString();
break;
}
return str;
}
catch
{
return "";
}
}
public string GetHardDiskSerialNumber()
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
string str = "";
foreach (ManagementObject obj2 in searcher.Get())
{
str = obj2["SerialNumber"].ToString().Trim();
break;
}
return str;
}
catch
{
return "";
}
}
public string GetNetCardMACAddress()
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> 'Microsoft'))");
string str = "";
foreach (ManagementObject obj2 in searcher.Get())
{
str = obj2["MACAddress"].ToString().Trim();
}
return str;
}
catch
{
return "";
}
}
public bool regmutousoft(string computerbit, string softname, string filename)
{
bool flag = true;
string str = "";
SHA1 sha = new SHA1CryptoServiceProvider();
str = BitConverter.ToString(sha.ComputeHash(Encoding.Default.GetBytes(softname))).Replace("-", "").ToUpper();
//if (!File.Exists(filename))
//{
// flag = false;
// Stream stream = File.Open(filename, FileMode.OpenOrCreate);
// StreamWriter writer = new StreamWriter(stream);
// writer.WriteLine(computerbit);
// writer.Close();
// stream.Close();
// return flag;
//}
//Stream stream2 = File.Open(filename, FileMode.Open);
//StreamReader reader = new StreamReader(stream2);
//string str2 = "";
string str3 = computerbit;
//while ((str2 = reader.ReadLine()) != null)
//{
// str3 = str2;
//}
//reader.Close();
//stream2.Close();
//if (str3.Length != 0x18)
//{
// //return false;
//}
SHA1 sha2 = new SHA1CryptoServiceProvider();
string str4 = BitConverter.ToString(sha2.ComputeHash(Encoding.Default.GetBytes(computerbit))).Replace("-", "").ToUpper();
string str5 = "";
for (int i = 0; i < str4.Length; i++)
{
if ((i % 2) == 1)
{
str5 = str5 + str4[i];
}
}
string str6 = "";
for (int j = 0; j < str.Length; j++)
{
if ((j % 2) == 0)
{
str6 = str6 + str[j];
}
}
int[] numArray = new int[20];
for (int k = 0; k < 20; k++)
{
numArray[k] = str6[k] + str5[k];
numArray[k] = numArray[k] % 0x24;
}
string str7 = "";
for (int m = 0; m < 20; m++)
{
if ((m > 0) && ((m % 4) == 0))
{
str7 = str7 + "-";
}
str7 = str7 + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[numArray[m]];
}
if (str3 == str7)
{
flag = true;
}
Console.WriteLine("机器码:" + str3);
Console.WriteLine("注册码:"+str7);
return flag;
}
}
}
方法二:
using System.Management;
//Win32_NetworkAdapterConfiguration是WMI数据库中用来存放网络设备的信息表
ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'");
//ManagementObjectCollection对象用来存放查询结果
ManagementObjectCollection queryCollection = query.Get();
foreach (ManagementObject mo in queryCollection)
{
Console.WriteLine("Network Card:{0}", mo["Description"]);
Console.WriteLine("MAC Address:{0}", mo["MACAddress"]);
//addresses, subnets和 defaultgateways 值都是可以包含多个值得数组.
//为了适应这种情况,为了适应这种情况,用户必须把结果分配到一个字符串数组,
//并再一次用foreach语句通过该字符串数组
string[] addresses = (string[])mo["IPAddress"];
string[] subnets = (string[])mo["IPSubnet"];
string[] defaultgateways = (string[])mo["DefaultIPGateway"];
//任何一个接口都可能有多个IP地址
foreach (string ipaddress in addresses)
{
Console.WriteLine("IP Address:{0}", ipaddress);
}
foreach (string subnet in subnets)
{
Console.WriteLine("Subnet Mask:{0}", subnet);
}
foreach (string defaultgateway in defaultgateways)
{
Console.WriteLine("Gateway:{0}", defaultgateway);
}
Console.WriteLine();
}
希望本文所述对大家的C#程序设计有所帮助。
0
投稿
猜你喜欢
- 所属命名空间:System.Collections.Generic public class
- 本文实例为大家分享了C语言实现简单版三子棋的具体代码,供大家参考,具体内容如下游戏的主函数设计:1.打印出可以让玩家选择游戏开始和退出的菜单
- 首先来看一下效果: 大体思路如下: 总体布局用了一个自定义的ViewGroup,里面包了两个View(top Vie
- 上一次接触到编码的知识,还是上大学的时候,那时候学的是通信工程专业,有关编码的内容,不记得是在通信原理还是信息论与编码里面学到的了。却依然记
- 1、谷歌浏览器配置管理在代理服务器中,按上图进行设置,可以把localhost换成 127.0.0.1 ,端口换成你想设置的,但是不要与别的
- 目前很多网页都有滑动验证,目的就是防止不良爬虫扒他们网站的数据,我这次本着学习的目的使用Java和selenium学习解决滑动验证的问题,前
- 本文基于Java实现了一个简单的单词本安卓a
- 本文实例为大家分享了java实现上传网络图片到微信临时素材的具体代码,供大家参考,具体内容如下package org.afuos.playc
- 前言上一篇我们认识了Kotlin编程语言,也搭建好开发环境。本篇就进入Kotlin的基础语法介绍,与其他编程语言一样,Kotlin也有自己的
- 有时候我们在使用java编程的时候,想启动线程,怎么启动呢,下面来分享一下方法第一步在我们的电脑上打开eclipse,创建一个java项目,
- 下面随笔说明函数指针用法。函数指针的定义:定义形式:存储类型 数据类型 (*函数指针名)()含义:函数指针指向的是程序代码存储区函数指针的典
- 本文实例讲述了C#实现中英文混合字符串截取的方法,是C#字符串操作中非常常用的一个方法。分享给大家供大家参考之用。具体方法如下:具体功能代码
- MyBatis Xml映射文件字符串替换字符串替换默认情况下,使用 #{} 格式的语法会导致 MyBatis 创建 PreparedStat
- 1.编写核心类MainApp:package com.yiidian.gson;import com.google.gson.Gson;im
- 以前传统的比较方式是遍历图片中的每一个像素,然后进行比对。这样的比对在少量图片的比对上虽然效率低一点,但是也没有什么不好。但是在大量图片比对
- 本文实例为大家分享了ManualResetEvent的使用方法,供大家参考,具体内容如下1. 源码下载:下载地址:ManualResetEv
- 拆分字符串:这个可以使用两次分割,第一次使用 | 分割,放到arr数组里,然后使用循环对arr[i]进行使用:分割public static
- Spring Boot文件上传与下载在实际的Web应用开发中,为了成功上传文件,必须将表单的method设置为post,并将enctype设
- 前言在java中遍历Map有不少的方法。这篇文章我们就来看一下Java读取Map的两种方法以及这两种方法的对比。一、 遍历Map方
- 前言最近碰到了Mybatis一对多查询的场景,在这里总结对比下常见的两种实现方式。本文以常见的订单表和订单详情表来举例说明;数据库表准备订单