c# 读取硬件信息并进行加密绑定
声明
如果你也有兴趣或者想找作者聊聊,欢迎留言或发送邮件至:dreamdonghui@163.com
作者还拥有个人公众号,会写一些管理、感悟类文章,知圈,自创立以来一直保持着高质量(后台统计每篇的阅读完成率都在90%以上)持续更新,二维码如下,欢迎扫描关注:
流程
- 读取硬件信息(此例中读取cpu和磁盘信息)
- 加密
- 解密
注意:1.磁盘信息包括插入的移动硬盘或U盘,如果将此信息也绑定,那么插入外部存储设备比如U盘的时候会误导加密程序。2.加密和解密采用通用的加密算法,需要添加用户自己的字段参与运算以增加加密可靠性,此例程中采用helloword字段参与加密运算,当然解密必须要采用与加密完全相同的字段。
1.读取硬件信息
所需命名空间:using System.Management;
代码段:
private string GetSystemInfo()
{
ManagementClass mangnmt = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection mcol = mangnmt.GetInstances();
string dskInfo = "";
foreach (ManagementObject strt in mcol)
{
dskInfo += Convert.ToString(strt["VolumeSerialNumber"]);
}
string cpuInfo = string.Empty;
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["processorID"].Value.ToString();
break;
}
return cpuInfo + dskInfo;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
2.加密
命名空间:using System.Security.Cryptography;
代码示例:
private string Encrypt(string clearText)
{
string EncryptionKey = "helloword";
byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(clearBytes, 0, clearBytes.Length);
cs.Close();
}
clearText = Convert.ToBase64String(ms.ToArray());
}
}
return clearText;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
3. 解密
命名空间:using System.Security.Cryptography;
示例代码:
private string Decrypt(string cipherText)
{
string EncryptionKey = "helloword";
cipherText = cipherText.Replace(" ", "+");
try
{
Convert.FromBase64String(cipherText);
}
catch(Exception e)
{
MessageBox.Show("The license code is not available!!!");
return "";
}
byte[] cipherBytes = Convert.FromBase64String(cipherText);
using (Aes encryptor = Aes.Create())
{
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
encryptor.Key = pdb.GetBytes(32);
encryptor.IV = pdb.GetBytes(16);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(cipherBytes, 0, cipherBytes.Length);
cs.Close();
}
cipherText = Encoding.Unicode.GetString(ms.ToArray());
}
}
return cipherText;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
此程序的加密程序是单独的应用,有界面,输入硬件字符信息后会产生加密后的数据。而且代码量很小,已上传至csdn,需要的可以下载参考
https://blog.csdn.net/dreamdonghui/article/details/84989923?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242