在我们编写好一款软件后,我们不想别人盗用我们的软件,这时候我们可以采用注册的方式来保护我们的作品。这时候我们可能就需要简单了解一下加密解密技术,下面是我的简单总结:
第一步:程序获得运行机的唯一标示(比如:网卡号,CPU编号,硬盘号等等)。
第二步:程序将获得的唯一标示加密,然后有用户或者程序将加密后的标示发送给你。
第三步:你将加密后的标示解密(其实这时候你获得的就是:网卡号,CPU编号,硬盘号)然后你再将网卡号,CPU编号,硬盘号加密发送给客户注册。
第四步:程序将你发送的注册号进行解密,解密后的编号其实也是:网卡号,CPU编号,硬盘号。
第五步:每当程序启动,首先解密你发送的注册号,然后读取网卡号,CPU编号,硬盘号等等,最好进行验证,看两个标示是否一样。
具体实例看代码:
第一步:程序获得运行机的唯一标示:硬盘号,CPU信息
1 //获取硬盘号 2 3 private string GetDiskID() 4 5 { 6 7 try 8 9 { 10 11 //获取硬盘ID 12 13 String HDid = ""; 14 15 ManagementClass mc = new ManagementClass("Win32_DiskDrive"); 16 17 ManagementObjectCollection moc = mc.GetInstances(); 18 19 foreach (ManagementObject mo in moc) 20 21 { 22 23 HDid = (string)mo.Properties["Model"].Value; 24 25 } 26 27 moc = null; 28 29 mc = null; 30 31 return HDid; 32 33 } 34 35 catch 36 37 { 38 39 return ""; 40 41 } 42 43 finally 44 45 { 46 47 } 48 49 } 50 51 //获取CPU信息 52 53 private string GetCpuInfo() 54 55 { 56 57 try 58 59 { 60 61 string cpuInfo = "";//cpu序列号 62 63 ManagementClass cimobject = new ManagementClass("Win32_Processor"); 64 65 ManagementObjectCollection moc = cimobject.GetInstances(); 66 67 foreach (ManagementObject mo in moc) 68 69 { 70 71 cpuInfo = mo.Properties["ProcessorId"].Value.ToString(); 72 73 } 74 75 return cpuInfo; 76 77 } 78 79 catch 80 81 { 82 83 this.senRegeditID.Enabled = false; 84 85 this.GetId.Enabled = true; 86 87 } 88 89 90 91 return ""; 92 93 }
第二步:程序将获得的唯一标示加密
1 //加密 2 static public string Encrypt(string PlainText) 3 { 4 string KEY_64 = "dafei250"; 5 string IV_64 = "DAFEI500"; 6 byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); 7 byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); 8 DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 9 int i = cryptoProvider.KeySize; 10 MemoryStream ms = new MemoryStream(); 11 CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); 12 StreamWriter sw = new StreamWriter(cst); 13 sw.Write(PlainText); 14 sw.Flush(); 15 cst.FlushFinalBlock(); 16 sw.Flush(); 17 return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); 18 }
第三步:你将加密后的标示解密(注册的时候解密)
1 //解密 2 public static string Decrypt(string CypherText) 3 { 4 string KEY_64 = "haeren55"; //必须是8个字符(64Bit) 5 string IV_64 = "HAEREN55"; //必须8个字符(64Bit) 6 try 7 { 8 byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); 9 byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); 10 byte[] byEnc; 11 try 12 { 13 byEnc = Convert.FromBase64String(CypherText); 14 } 15 catch 16 { 17 return null; 18 } 19 DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 20 MemoryStream ms = new MemoryStream(byEnc); 21 CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); 22 StreamReader sr = new StreamReader(cst); 23 return sr.ReadToEnd(); 24 } 25 catch { return "无法解密!"; } 26 }
第四步第五步就不用具体说了吧。另外:如需转载请注明出处:半支烟阿杰。http://blog.csdn.net/gisfarmer/ 谢谢。
浙公网安备 33010602011771号