简述关于软件加密软件注册通用技术
在我们编写好一款软件后,我们不想别人盗用我们的软件,这时候我们可以采用注册的方式来保护我们的作品。这时候我们可能就需要简单了解一下加密解密技术,下面是我的简单总结:
第一步:程序获得运行机的唯一标示(比如:网卡号,CPU编号,硬盘号等等)。
第二步:程序将获得的唯一标示加密,然后有用户或者程序将加密后的标示发送给你。
第三步:你将加密后的标示解密(其实这时候你获得的就是:网卡号,CPU编号,硬盘号)然后你再将网卡号,CPU编号,硬盘号加密发送给客户注册。
第四步:程序将你发送的注册号进行解密,解密后的编号其实也是:网卡号,CPU编号,硬盘号。
第五步:每当程序启动,首先解密你发送的注册号,然后读取网卡号,CPU编号,硬盘号等等,最好进行验证,看两个标示是否一样。
具体实例看代码:
第一步:程序获得运行机的唯一标示:硬盘号,CPU信息
- //获取硬盘号
- 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 "";
- }
第二步:程序将获得的唯一标示加密
- //加密
- 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 "无法解密!"; }
- }
第四步第五步就不用具体说了吧。另外:如需转载请注明出处:半支烟阿杰。http://blog.csdn.net/gisfarmer/ 谢谢。