程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 簡述.Net下的應用程序授權實戰步驟

簡述.Net下的應用程序授權實戰步驟

編輯:.NET實例教程

看了“看了下面那篇“Crack別人應用程序”的文章有感,簡述.Net下的應用程序授權。”,自己實際操作了把得出的心得  。這裡原理啊背景啊什麼都不介紹了,笑望人生已經在他的BLOG上都寫的相當清楚了,有什麼不細節不明白的可以去看原文。推薦先大概看下原文,現看我下面的步驟,然後再回頭去研究原文的細節。由於我自己寫的實例是用在公司一項目中,源代碼就不方便放出來了,嘿嘿。
  第一步:生成一組公鑰和私鑰,公鑰用於你發布程序,私鑰屬於注冊碼生成。vIEw plaincopy to clipboardprint?
using(RSACryptoServiceProvider rsa = new  RSACryptoServiceProvider())    
{    
 // 公鑰    
 string pubkey = rsa.ToXMLString(false);    
    
 // 私鑰    
string prikey = rsa.ToXMLString(true);    
  
//如果是webForm就Response.Write(pubkey + ”<br/>” + prikey); 下   
//如果是winForm就MessageBox.Show("公鑰:" + pubkey + "\r\n私鑰:" + prikey); 下   

using(RSACryptoServiceProvider rsa = new  RSACryptoServiceProvider()) 

 // 公鑰 
 string pubkey = rsa.ToXMLString(false); 
 
 // 私鑰 
string prikey = rsa.ToXMLString(true);

//如果是webForm就Response.Write(pubkey + ”<br/>” + prikey); 下
//如果是winForm就MessageBox.Show("公鑰:" + pubkey + "\r\n私鑰:" + prikey); 下
}  第二步:取得機器硬件編碼。我選用CUP的編號。vIEw plaincopy to clipboardprint?
/// <summary>   
/// 獲取CPU編號   
/// </summary>   
/// <returns></returns>   
public string GetCpuId()   
{   
  
ManagementClass mc = new ManagementClass("Win32_Processor");   
ManagementObjectCollection moc = mc.GetInstances();   
  
String strCpuID = null;   
foreach (ManagementObject mo in moc)   
{   
strCpuID = mo.PropertIEs["ProcessorId"].Value.ToString();   
break;   
}   
return strCpuID;   
  

 /// <summary>
 /// 獲取CPU編號
 /// </summary>
 /// <returns></returns>
 public string GetCpuId()
 {

 ManagementClass mc = new ManagementClass("Win32_Processor");
 ManagementObjectCollection moc = mc.GetInstances();

 String strCpuID = null;
 foreach (ManagementObject mo in moc)
 {
 strCpuID = mo.PropertIEs["ProcessorId"].Value.ToString();
 break;
 }
 return strCpuID;

 }  第三步:編寫注冊碼生成WinForm程序,使用CUP的編號來生成注冊碼,當然你也可以用 WebForm來寫。vIEw plaincopy to clipboardprint?
using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())    
{    
 rsa.FromXMLString(“私鑰”);    
 // 加密對象    
 RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa);    
 f.SetHashAlgorithm("SHA1");    
 byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(“CUP的編號”);    
 SHA1Managed sha =
new SHA1Managed();    
 byte[] result = sha.ComputeHash(source);    
    
 byte[] b = f.CreateSignature(result);    
    
msg.Text = Convert.ToBase64String(b); //這裡就得到了string形式的注冊碼   
  
//再接下來你可以把生成的注冊碼保存成license.lic文件,license.lic文件也沒什麼特別的格式就是相當於把注冊嗎保存到一個txt文件中,無非這個txt文件的後綴改成了lic,你要高興也可保存成其它多種格式。   
//也可以保存在注冊表中或是web.config中,總之能讓你的發布的應用程序能讀的到就行。   

using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider()) 

 rsa.FromXMLString(“私鑰”); 
 // 加密對象 
 RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa); 
 f.SetHashAlgorithm("SHA1"); 
 byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(“CUP的編號”); 
 SHA1Managed sha = new SHA1Managed(); 
 byte[] result = sha.ComputeHash(source); 
 
 byte[] b = f.CreateSignature(result); 
 
msg.Text = Convert.ToBase64String(b); //這裡就得到了string形式的注冊碼

//再接下來你可以把生成的注冊碼保存成license.lic文件,license.lic文件也沒什麼特別的格式就是相當於把注冊嗎保存到一個txt文件中,無非這個txt文件的後綴改成了lic,你要高興也可保存成其它多種格式。
//也可以保存在注冊表中或是web.config中,總之能讓你的發布的應用程序能讀的到就行。
}  第四步:在發布的程序相關地方添加對注冊碼有效性的驗證。如添加在程序啟動的時候,程序執行特定操作的時候等等,總之看你的需要做有效性的驗證。vIEw plaincopy to clipboardprint?
//相關注冊碼獲取代碼……   
//以下代碼是發布程序使用公鑰對注冊碼進行驗證   
using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())    
{    
 rsa.FromXMLString(“公鑰”);    
 RSAPKCS1SignatureDeformatter f = new RSAPKCS1SignatureDeformatter(rsa);    
    
 f.SetHashAlgorithm("SHA1");    
    
 byte[] key = Convert.FromBase64String(“注冊碼”);    
    
 SHA1Managed sha = new SHA1Managed();    
 byte[] name = sha.ComputeHash(ASCIIEncoding.ASCII.GetBytes(“注冊碼”));    
 if(f.VerifySignature(name,key))    
 msg.Text = "驗證成功"; //可以return true;等方式返回相應的狀態   
 else    
 msg.Text = "不成功";    
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved