您的位置:首页 > 其它

简述关于软件加密软件注册通用技术

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

1.                //获取硬盘号

2.                private string GetDiskID()
3.                {   
4.                    try
5.                    {
6.                        //获取硬盘ID
7.                        String HDid = "";
8.                        ManagementClass mc = new ManagementClass("Win32_DiskDrive");
9.                        ManagementObjectCollection moc = mc.GetInstances();
10.                     foreach (ManagementObject mo in moc)
11.                     {
12.                         HDid = (string)mo.Properties["Model"].Value;
13.                     }
14.                     moc = null;
15.                     mc = null;
16.                     return HDid;
17.                 }
18.                 catch
19.                 {
20.                     return "";
21.                 }
22.                 finally
23.                 {
24.                 }
25.             }
26.             //获取CPU信息
27.             private string GetCpuInfo()
28.             {
29.                 try
30.                 {
31.                     string cpuInfo = "";//cpu序列号
32.                     ManagementClass cimobject = new ManagementClass("Win32_Processor");
33.                     ManagementObjectCollection moc = cimobject.GetInstances();
34.                     foreach (ManagementObject mo in moc)
35.                     {
36.                         cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
37.                     }
38.                     return cpuInfo;
39.                 }
40.                 catch
41.                 {
42.                     this.senRegeditID.Enabled = false;
43.                     this.GetId.Enabled = true;
44.                 }
45.           
46.                 return "";
47.             }

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

1.                //加密

2.               static public string Encrypt(string PlainText)
3.                {
4.                    string KEY_64 = "dafei250";
5.                    string IV_64 = "DAFEI500";
6.         
7.                    byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
8.                    byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
9.         
10.                 DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
11.                 int i = cryptoProvider.KeySize;
12.                 MemoryStream ms = new MemoryStream();
13.                 CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
14.      
15.                 StreamWriter sw = new StreamWriter(cst);
16.                 sw.Write(PlainText);
17.                 sw.Flush();
18.                 cst.FlushFinalBlock();
19.                 sw.Flush();
20.                 return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
21.             }

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

1.                //解密
2.                public static string Decrypt(string CypherText)
3.                {
4.                    string KEY_64 = "haeren55"; //必须是8个字符(64Bit)
5.                    string IV_64 = "HAEREN55";  //必须8个字符(64Bit)
6.         
7.                    try
8.                    {
9.                        byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
10.                     byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
11.      
12.                     byte[] byEnc;
13.                     try
14.                     {
15.                         byEnc = Convert.FromBase64String(CypherText);
16.                     }
17.                     catch
18.                     {
19.                         return null;
20.                     }
21.      
22.                     DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
23.                     MemoryStream ms = new MemoryStream(byEnc);
24.                     CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
25.                     StreamReader sr = new StreamReader(cst);
26.                     return sr.ReadToEnd();
27.                 }
28.                 catch { return "无法解密!"; }
29.             }

第四步第五步就不用具体说了吧。另外:如需转载请注明出处:半支烟阿杰http://blog.csdn.net/gisfarmer/ 谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息