获取硬盘序列号 String HDid = ""; ManagementClass mc = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { HDid = (string)mo.Properties["Model"].Value; } moc = null; mc = null; MessageBox.Show(HDid);
//步骤一: 获得CUP序列号和硬盘序列号的实现代码如下: //取得CPU序号 public string getCpu() { string strCpu = null; ManagementClass myCpu = new ManagementClass("win32_Processor"); ManagementObjectCollection myCpuConnection = myCpu.GetInstances(); foreach (ManagementObject myObject in myCpuConnection) { strCpu = myObject.Properties["Processorid"].Value.ToString(); break; } return strCpu; } // 取得设备硬盘的卷标号 public string GetDiskVolumeSerialNumber() { ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\""); disk.Get(); return disk.GetPropertyValue("VolumeSerialNumber").ToString(); } //步骤二: 收集硬件信息生成机器码, 代码如下: //生成机器码 private void button1_Click(object sender, EventArgs e) { label1.Text = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号 string[] strid = new string[24]; for (int i = 0; i < 24; i++)//把字符赋给数组 { strid[i] = label1.Text.Substring(i, 1); } label1.Text = ""; Random rdid = new Random(); for (int i = 0; i < 24; i++)//从数组随机抽取24个字符组成新的字符生成机器三 { label1.Text += strid[rdid.Next(0, 24)]; } } //步骤三: 使用机器码生成软件注册码, 代码如下: public int[] intCode = new int[127];//用于存密钥 public void setIntCode()//给数组赋值个小于10的随机数 { Random ra = new Random(); for (int i = 1; i < intCode.Length; i++) { intCode[i] = ra.Next(0, 9); } } public int[] intNumber = new int[25];//用于存机器码的Ascii值 public char[] Charcode = new char[25];//存储机器码字 //生成注册码 private void button2_Click(object sender, EventArgs e) { if (label1.Text != "") { //把机器码存入数组中 setIntCode();//初始化127位数组 for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中 { Charcode[i] = Convert.ToChar(label1.Text.Substring(i - 1, 1)); } for (int j = 1; j < intNumber.Length; j++)//把字符的ASCII值存入一个整数组中。 { intNumber[j] = intCode[Convert.ToInt32(Charcode[j])] + Convert.ToInt32(Charcode[j]); } string strAsciiName = null;//用于存储机器码 for (int j = 1; j < intNumber.Length; j++) { //MessageBox.Show((Convert.ToChar(intNumber[j])).ToString()); if (intNumber[j] >= 48 && intNumber[j] <= 57)//判断字符ASCII值是否0-9之间 { strAsciiName += Convert.ToChar(intNumber[j]).ToString(); } else if (intNumber[j] >= 65 && intNumber[j] <= 90)//判断字符ASCII值是否A-Z之间 { strAsciiName += Convert.ToChar(intNumber[j]).ToString(); } else if (intNumber[j] >= 97 && intNumber[j] <= 122)//判断字符ASCII值是否a-z之间 { strAsciiName += Convert.ToChar(intNumber[j]).ToString(); } else//判断字符ASCII值不在以上范围内 { if (intNumber[j] > 122)//判断字符ASCII值是否大于z { strAsciiName += Convert.ToChar(intNumber[j] - 10).ToString(); } else { strAsciiName += Convert.ToChar(intNumber[j] - 9).ToString(); } } } label3.Text = strAsciiName;//得到注册码 } else { MessageBox.Show("请选生成机器码", "注册提示"); } } 这样了之后lable3里边还是没有注册码啊!
這種加密在.NET來說,是徒勞的
比如:硬盘编号 CPU 编号 等等..
然后通过des 或者其他 加密方式 生成一段机器码
用户把这个发给你..
你就用另外一个注册软件把机器码再加密生成注册码发给用户
用户输入注册码以后就保存在一个地方用户程序每次启动的时候就先检查
机器码 加密后 和注册码对比 要是不对 就不能进入说起来很复杂,其实还是蛮简单的
String HDid = "";
ManagementClass mc = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
HDid = (string)mo.Properties["Model"].Value;
}
moc = null;
mc = null;
MessageBox.Show(HDid);
//取得CPU序号
public string getCpu()
{
string strCpu = null;
ManagementClass myCpu = new ManagementClass("win32_Processor");
ManagementObjectCollection myCpuConnection = myCpu.GetInstances();
foreach (ManagementObject myObject in myCpuConnection)
{
strCpu = myObject.Properties["Processorid"].Value.ToString();
break;
}
return strCpu;
} // 取得设备硬盘的卷标号
public string GetDiskVolumeSerialNumber()
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"d:\"");
disk.Get();
return disk.GetPropertyValue("VolumeSerialNumber").ToString();
} //步骤二: 收集硬件信息生成机器码, 代码如下:
//生成机器码
private void button1_Click(object sender, EventArgs e)
{
label1.Text = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号
string[] strid = new string[24]; for (int i = 0; i < 24; i++)//把字符赋给数组
{
strid[i] = label1.Text.Substring(i, 1);
}
label1.Text = "";
Random rdid = new Random();
for (int i = 0; i < 24; i++)//从数组随机抽取24个字符组成新的字符生成机器三
{
label1.Text += strid[rdid.Next(0, 24)];
}
}
//步骤三: 使用机器码生成软件注册码, 代码如下:
public int[] intCode = new int[127];//用于存密钥
public void setIntCode()//给数组赋值个小于10的随机数
{
Random ra = new Random();
for (int i = 1; i < intCode.Length; i++)
{
intCode[i] = ra.Next(0, 9);
}
} public int[] intNumber = new int[25];//用于存机器码的Ascii值
public char[] Charcode = new char[25];//存储机器码字
//生成注册码
private void button2_Click(object sender, EventArgs e)
{
if (label1.Text != "")
{ //把机器码存入数组中
setIntCode();//初始化127位数组
for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中
{
Charcode[i] = Convert.ToChar(label1.Text.Substring(i - 1, 1));
}
for (int j = 1; j < intNumber.Length; j++)//把字符的ASCII值存入一个整数组中。
{
intNumber[j] = intCode[Convert.ToInt32(Charcode[j])] + Convert.ToInt32(Charcode[j]);
}
string strAsciiName = null;//用于存储机器码
for (int j = 1; j < intNumber.Length; j++)
{
//MessageBox.Show((Convert.ToChar(intNumber[j])).ToString());
if (intNumber[j] >= 48 && intNumber[j] <= 57)//判断字符ASCII值是否0-9之间
{
strAsciiName += Convert.ToChar(intNumber[j]).ToString();
}
else if (intNumber[j] >= 65 && intNumber[j] <= 90)//判断字符ASCII值是否A-Z之间
{
strAsciiName += Convert.ToChar(intNumber[j]).ToString();
}
else if (intNumber[j] >= 97 && intNumber[j] <= 122)//判断字符ASCII值是否a-z之间
{
strAsciiName += Convert.ToChar(intNumber[j]).ToString();
}
else//判断字符ASCII值不在以上范围内
{
if (intNumber[j] > 122)//判断字符ASCII值是否大于z
{
strAsciiName += Convert.ToChar(intNumber[j] - 10).ToString();
}
else
{
strAsciiName += Convert.ToChar(intNumber[j] - 9).ToString();
}
}
}
label3.Text = strAsciiName;//得到注册码
}
else
{
MessageBox.Show("请选生成机器码", "注册提示");
}
}
这样了之后lable3里边还是没有注册码啊!
卡巴斯基是读取你的硬盘ID与CpuID组合起来的 你也可以这样搞阿
用户申请到注册码你就把用户的CPU与硬盘ID放到用户的安装包路径下
用户登录系统时候先检查改路径下有没有注册码的那个文件 如果有并且与本机ID一样 则启动