C# 读取机器码,CPU序列号,生成注册码类(优化)

有些CPU不支持获取序列号。

获取strCpu = myObject.Properties["Processorid"].Value.ToString();时,请判断下返回是否为null,为null的话就说明cpu不支持。
获取集合对象属性,除非100%确定,否则不要直接访问属性。一旦返回空,就会报空引用错误

代码

 using System.Management;//需要在项目中添加System.Management引用

namespace ECBC_CDKEY{    public class SoftReg    {        /// <summary>        /// 取得设备硬盘的卷标号        /// </summary>        /// <returns></returns>        public string GetDiskVolumeSerialNumber()        {            ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");            ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");            disk.Get();            return disk.GetPropertyValue("VolumeSerialNumber").ToString();        }

        /// <summary>        /// 获得CPU的序列号        /// </summary>        /// <returns></returns>        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;        }

        /// <summary>        /// 生成机器码        /// </summary>        /// <returns></returns>        public string getMNum()        {            string strNum = getCpu() + GetDiskVolumeSerialNumber();//获得24位Cpu和硬盘序列号            string strMNum = strNum.Substring(0, 24);//从生成的字符串中取出前24个字符做为机器码            return strMNum;        }        public int[] intCode = new int[127];//存储密钥        public int[] intNumber = new int[25];//存机器码的Ascii值        public char[] Charcode = new char[25];//存储机器码字        public void setIntCode()//给数组赋值小于10的数        {            for (int i = 1; i < intCode.Length; i++)            {                intCode[i] = i % 9;            }        }

        /// <summary>        /// 生成注册码        /// </summary>        /// <returns></returns>        public string getRNum()        {            setIntCode();//初始化127位数组            string MNum = this.getMNum();//获取注册码            for (int i = 1; i < Charcode.Length; i++)//把机器码存入数组中            {                Charcode[i] = Convert.ToChar(MNum.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 = "";//用于存储注册码            for (int j = 1; j < intNumber.Length; j++)            {                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();                    }                }            }            return strAsciiName;//返回注册码        }    }}

内容来源:http://blog.sina.com.cn/s/blog_645919c40100gryh.html

时间: 2024-10-20 13:14:03

C# 读取机器码,CPU序列号,生成注册码类(优化)的相关文章

C# 读取机器码_CPU序列号_生成注册码类

using System.Management;//需要在项目中添加System.Management引用 public class SoftReg { /// <summary> /// 取得设备硬盘的卷标号 /// </summary> /// <returns></returns> public string GetDiskVolumeSerialNumber() { ManagementClass mc = new ManagementClass(&

java RSA加密生成license,用CPU序列号生成机器码

? license里就是一些注册信息,键值对组成的字符串 ? 对称加密: DES,AES,加密解密都用一个秘钥,速度快 非对称机密 RSA,可以私钥加密公钥解密,也可以公钥机密私钥解密,速度慢 注意:RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行.RSA加密对明文的长度是有限制的,如果加密数据过大会抛出异常: ? 常见加密算法 DES? ??? DES是Data Encryption Standard(数据加密标准)的缩写,DES算法为密

读取xml节点值生成一个实体类,读取xml所有节点值,读取所有xml所有节点名称

public partial class WebFormClassByEntity : System.Web.UI.Page    {        List<string> list = new List<string>();//存放所有节点名称        protected void Page_Load(object sender, EventArgs e)        {            //读取xml的文件路径            string filePah

如何通过java反射将数据库表生成实体类?

首先有几点声明: 1.代码是在别人的基础进行改写的: 2.大家有什么改进的意见可以告诉我,也可以自己改好共享给其他人: 3.刚刚毕业,水平有限,肯定有许多不足之处: 4.希望刚刚学习java的同学能有所启发. //这个是做转换的类,里面的DB只是封装了数据库的连接,大家可以用自己的,随意 package com.tt.util.gen.entity.tool; import java.io.File;import java.io.FileWriter;import java.io.IOExcep

zookeeper+redies 系统序列号生成

系统序列号生成服务是写的一个jar包,不依赖其他服务和数据,以下提供部分代码作为一个思路,作为大量数据订单生成时,不再使用数据库表的自增设置,由个系统模块自行生成. 一.使用规则 组成结构 + 生成时间 yyMMddHHmmss + 3位服务节点(001 到 999) + N位滚动序列(000001 到 999999 长度可自定义) 重复性解决方案 + 每秒钟单节点产生序列大于 999999 将会造成序列重复 + 每秒钟单节点产生序列小于 999999 则不会重复. 分布式解决方案 + 应用启动

T4模板_根据DB生成实体类

为了减少重复劳动,可以通过T4读取数据库表结构,生成实体类,用下面的实例测试了一下 1.首先创建一个项目,并添加文本模板: 2.添加 文本模板: 3.向T4文本模板文件添加代码: <#@ template language="C#" debug="True" hostspecific="True" #> <#@ assembly name="System.Data" #> <#@ assembly

基于硬盘号和CPU序列号的软件加密技术

CPU序列号是一个建立在处理器内部的.唯一的.不能被修改的编号.它由96位数字组成.高32位是CPU ID,用来识别CPU类型.低64位每个处理器都不同,唯一地代表了该处理器.CPU号可以用来识别每一个处理器.为了适应这一新特征,Intel在处理中增加了两条指令(“读取”和“禁止”)和一个寄存器位(模式指定寄存器位:Model Specific Register一“MSR”).读取指令扩展了CPUID读取指令.当执行读取指令时可以得到96位的处理器序列号.禁止指令可以禁止对处理器序列号的读取.为

《Nodejs开发加密货币》之二十六:轻松从Js文件生成UML类图

前言 上一篇<函数式编程入门经典>,罗嗦了很长,很多小伙伴看得云里雾里.这里提供一个实例,让大家切身感受函数式编程的奥妙和趣味.当然,仅仅为了举例而写代码就没有什么意义了,本书提供的例子都是承担了某项任务的具体项目或工具,这个例子自然也不能例外. 本书用到了大量的Uml类图,经常有小伙伴问我用什么工具画的.说实话,前几篇是我个人一点点手工整理的,但后来就感觉在浪费生命,作为程序员,怎么可能容忍这样的事情反复发生.所以,就有了 js2uml(见参考)这个小工具.只不过,当初目的单一,仅仅使用正则

ASM 取CPU序列号 / CPUID

获取CPU序列号我知道大概有两种方式一种为ASM另一种为WMI 如果要好点的话肯定是首选汇编了.没什么好解释的哇 不过今天 我们只在C#.C++.E三种语言上内嵌汇编实现获取CPUID的办法 首先我们先看看下面各种语言代码运行后的效果图. 上面是C#嵌入汇编运行后获取到的CPUID 我们在看看易语言上的 上面是E语言嵌入汇编后运行的结果 两者输出的值是相同. 可以证明嵌入的汇编运行上没有问题. 上面是C++嵌入汇编后运行的结果 两者输出的值是相同. #include "stdafx.h"