Skip to main content
 首页 » 编程设计

c# 读取硬件信息并进行加密绑定

2022年07月19日144java哥

声明

如果你也有兴趣或者想找作者聊聊,欢迎留言或发送邮件至:dreamdonghui@163.com
作者还拥有个人公众号,会写一些管理、感悟类文章,知圈,自创立以来一直保持着高质量(后台统计每篇的阅读完成率都在90%以上)持续更新,二维码如下,欢迎扫描关注:
知圈二维码

流程

  1. 读取硬件信息(此例中读取cpu和磁盘信息)
  2. 加密
  3. 解密

注意: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


本文参考链接:https://www.cnblogs.com/xihong2014/p/13693665.html