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

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

1.                //获取硬盘号 <script type="text/JavaScript"></script> <script src="http://a.alimama.cn/inf.js" type="text/javascript"></script>

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.                //加密 <script type="text/JavaScript"></script> <script src="http://a.alimama.cn/inf.js" type="text/javascript"></script>

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/ 谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值