C# 获取硬盘号,CPU信息,加密解密技术的步骤

作者:风云SH变幻 时间:2023-04-23 10:37:50 

在我们编写好一款软件后,我们不想别人盗用我们的软件,这时候我们可以采用注册的方式来保护我们的作品。这时候我们可能就需要简单了解一下加密解密技术,下面是我的简单总结:
第一步:程序获得运行机的唯一标示(比如:网卡号,CPU编号,硬盘号等等)。
第二步:程序将获得的唯一标示加密,然后有用户或者程序将加密后的标示发送给你。
第三步:你将加密后的标示解密(其实这时候你获得的就是:网卡号,CPU编号,硬盘号)然后你再将网卡号,CPU编号,硬盘号加密发送给客户注册。
第四步:程序将你发送的注册号进行解密,解密后的编号其实也是:网卡号,CPU编号,硬盘号。
第五步:每当程序启动,首先解密你发送的注册号,然后读取网卡号,CPU编号,硬盘号等等,最好进行验证,看两个标示是否一样。
具体实例看代码:

第一步:程序获得运行机的唯一标示:硬盘号,CPU信息


//获取硬盘号<script type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5018464"; alimama_type="f"; alimama_sizecode ="tl_1x1_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>
private string GetDiskID()
{  
try
{
 //获取硬盘ID
 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;
 return HDid;
}
catch
{
 return "";
}
finally
{
}
}

//获取CPU信息
private string GetCpuInfo()
{
try
{
 string cpuInfo = "";//cpu序列号
 ManagementClass cimobject = new ManagementClass("Win32_Processor");
 ManagementObjectCollection moc = cimobject.GetInstances();
 foreach (ManagementObject mo in moc)
 {
  cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
 }
 return cpuInfo;
}
catch
{
 this.senRegeditID.Enabled = false;
 this.GetId.Enabled = true;
}
return "";
}

第二步:程序将获得的唯一标示加密


//加密 <script type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>
static public string Encrypt(string PlainText)
{
string KEY_64 = "dafei250";
string IV_64 = "DAFEI500";
byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
int i = cryptoProvider.KeySize;
MemoryStream ms = new MemoryStream();
CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cst);
sw.Write(PlainText);
sw.Flush();
cst.FlushFinalBlock();
sw.Flush();
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}

第三步:你将加密后的标示解密(注册的时候解密)


//解密
public static string Decrypt(string CypherText)
{
string KEY_64 = "haeren55"; //必须是8个字符(64Bit)
string IV_64 = "HAEREN55"; //必须8个字符(64Bit)
try
{
 byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
 byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
 byte[] byEnc;
 try
 {
  byEnc = Convert.FromBase64String(CypherText);
 }
 catch
 {
  return null;
 }
 DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
 MemoryStream ms = new MemoryStream(byEnc);
 CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
 StreamReader sr = new StreamReader(cst);
 return sr.ReadToEnd();
}
catch { return "无法解密!"; }
}

来源:https://www.cnblogs.com/wzhk009/p/14206611.html

标签:c#,硬盘号,CPU信息,加密解密
0
投稿

猜你喜欢

  • 详解android系统的定制

    2022-03-14 11:20:19
  • Java实现简易生产者消费者模型过程解析

    2023-12-03 01:33:26
  • Android实现自动提取短信验证码功能

    2022-11-19 23:58:49
  • C#调用FFmpeg操作音视频的实现示例

    2021-10-08 12:40:00
  • 详解Android运行时权限及APP适配方法

    2021-06-15 11:06:17
  • c#快速写本地日志方法

    2021-08-24 09:31:17
  • MyBatis动态SQL标签的用法详解

    2021-07-24 10:38:56
  • 解决fastjson从1.1.41升级到1.2.28后报错问题详解

    2021-12-30 21:55:35
  • java实现十六进制字符unicode与中英文转换示例

    2021-05-29 18:19:29
  • Java实现双色球抽奖随机算法示例

    2023-04-25 12:15:38
  • 使用C#实现读取系统配置文件的代码实例讲解

    2023-02-18 10:36:56
  • SpringBoot集成整合JWT与Shiro流程详解

    2022-09-06 06:33:23
  • Mybatis如何实现InsertOrUpdate功能

    2022-10-11 10:26:58
  • 有关微博content的封装实现详解

    2022-12-02 17:37:53
  • SpringCloud Zuul实现负载均衡和熔断机制方式

    2023-08-23 11:56:43
  • JAVA线程池原理实例详解

    2021-10-01 17:59:01
  • Java 非阻塞I/O使用方法

    2022-01-01 22:54:57
  • C# Console利用mspaint打开图像并保存的方法

    2023-07-05 16:15:43
  • 基于android实现五子棋开发

    2022-05-22 14:21:43
  • Java定时器问题实例解析

    2021-08-21 21:02:53
  • asp之家 软件编程 m.aspxhome.com