龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > asp.net编程 >

简述ASP.Net下的应用程序授权实战步骤

时间:2009-12-21 11:47来源:未知 作者:admin 点击:
分享到:
看了“看了下面那篇“Crack别人应用程序”的文章有感,简述.Net下的应用程序授权。”,自己实际操作了把得出的心得。这里原理啊背景啊什么都不介绍了,笑望人生已经在他的BLOG上都
看了“看了下面那篇“Crack别人应用程序”的文章有感,简述.Net下的应用程序授权。”,自己实际操作了把得出的心得。这里原理啊背景啊什么都不介绍了,笑望人生已经在他的BLOG上都写的相当清楚了,有什么不细节不明白的可以去看原文。推荐先大概看下原文,现看我下面的步骤,然后再回头去研究原文的细节。由于我自己写的实例是用在公司一项目中,源代码就不方便放出来了,嘿嘿。
  第一步:生成一组公钥和私钥,公钥用于你发布程序,私钥属于注册码生成。
view plaincopy to clipboardprint?
  1. using(RSACryptoServiceProvider rsa = new  RSACryptoServiceProvider())    
  2. {    
  3.  // 公钥    
  4.  string pubkey = rsa.ToXmlString(false);    
  5.     
  6.  // 私钥    
  7. string prikey = rsa.ToXmlString(true);    
  8.   
  9. //如果是webForm就Response.Write(pubkey + ”<br/>” + prikey); 下   
  10. //如果是winForm就MessageBox.Show("公钥:" + pubkey + "\r\n私钥:" + prikey); 下   
  11. }  
  第二步:取得机器硬件编码。我选用CUP的编号。
view plaincopy to clipboardprint?
  1. /// <summary>   
  2. /// 获取CPU编号   
  3. /// </summary>   
  4. /// <returns></returns>   
  5. public string GetCpuId()   
  6. {   
  7.   
  8. ManagementClass mc = new ManagementClass("Win32_Processor");   
  9. ManagementObjectCollection moc = mc.GetInstances();   
  10.   
  11. String strCpuID = null;   
  12. foreach (ManagementObject mo in moc)   
  13. {   
  14. strCpuID = mo.Properties["ProcessorId"].Value.ToString();   
  15. break;   
  16. }   
  17. return strCpuID;   
  18.   
  19. }  
  第三步:编写注册码生成WinForm程序,使用CUP的编号来生成注册码,当然你也可以用 WebForm来写。
view plaincopy to clipboardprint?
  1. using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())    
  2. {    
  3.  rsa.FromXmlString(“私钥”);    
  4.  // 加密对象    
  5.  RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa);    
  6.  f.SetHashAlgorithm("SHA1");    
  7.  byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(“CUP的编号”);    
  8.  SHA1Managed sha = new SHA1Managed();    
  9.  byte[] result = sha.ComputeHash(source);    
  10.     
  11.  byte[] b = f.CreateSignature(result);    
  12.     
  13. msg.Text = Convert.ToBase64String(b); //这里就得到了string形式的注册码   
  14.   
  15. //再接下来你可以把生成的注册码保存成license.lic文件,license.lic文件也没什么特别的格式就是相当于把注册吗保存到一个txt文件中,无非这个txt文件的后缀改成了lic,你要高兴也可保存成其它多种格式。   
  16. //也可以保存在注册表中或是web.config中,总之能让你的发布的应用程序能读的到就行。   
  17. }  
  第四步:在发布的程序相关地方添加对注册码有效性的验证。如添加在程序启动的时候,程序执行特定操作的时候等等,总之看你的需要做有效性的验证。
view plaincopy to clipboardprint?
  1. //相关注册码获取代码……   
  2. //以下代码是发布程序使用公钥对注册码进行验证   
  3. using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())    
  4. {    
  5.  rsa.FromXmlString(“公钥”);    
  6.  RSAPKCS1SignatureDeformatter f = new RSAPKCS1SignatureDeformatter(rsa);    
  7.     
  8.  f.SetHashAlgorithm("SHA1");    
  9.     
  10.  byte[] key = Convert.FromBase64String(“注册码”);    
  11.     
  12.  SHA1Managed sha = new SHA1Managed();    
  13.  byte[] name = sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(“注册码”));    
  14.  if(f.VerifySignature(name,key))    
  15.  msg.Text = "验证成功"//可以return true;等方式返回相应的状态   
  16.  else    
  17.  msg.Text = "不成功";    
  18. }  
精彩图集

赞助商链接