国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

簡(jiǎn)述.Net下的應(yīng)用程序授權(quán)實(shí)戰(zhàn)步驟

2019-11-17 04:27:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  看了“看了下面那篇“Crack別人應(yīng)用程序”的文章有感,簡(jiǎn)述.Net下的應(yīng)用程序授權(quán)。”,自己實(shí)際操作了把得出的心得  。這里原理啊背景啊什么都不介紹了,笑望人生已經(jīng)在他的BLOG上都寫的相當(dāng)清楚了,有什么不細(xì)節(jié)不明白的可以去看原文。推薦先大概看下原文,現(xiàn)看我下面的步驟,然后再回頭去研究原文的細(xì)節(jié)。由于我自己寫的實(shí)例是用在公司一項(xiàng)目中,源代碼就不方便放出來(lái)了,嘿嘿。
  第一步:生成一組公鑰和私鑰,公鑰用于你發(fā)布程序,私鑰屬于注冊(cè)碼生成。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); 下
}  第二步:取得機(jī)器硬件編碼。我選用CUP的編號(hào)。view plaincopy to clipboardprint?
/// <summary>  
/// 獲取CPU編號(hào)  
/// </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編號(hào)
 /// </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;

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

using(RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
 rsa.FromXmlString(“私鑰”);
 // 加密對(duì)象
 RSAPKCS1SignatureFormatter f = new RSAPKCS1SignatureFormatter(rsa);
 f.SetHashAlgorithm("SHA1");
 byte[] source = System.Text.ASCIIEncoding.ASCII.GetBytes(“CUP的編號(hào)”);
 SHA1Managed sha = new SHA1Managed();
 byte[] result = sha.ComputeHash(source);
 
 byte[] b = f.CreateSignature(result);
 
msg.Text = Convert.ToBase64String(b); //這里就得到了string形式的注冊(cè)碼

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 拉萨市| 邵武市| 新田县| 高青县| 克东县| 临夏县| 祥云县| 卢龙县| 屏东市| 白山市| 玛多县| 大同县| 德庆县| 合阳县| 慈溪市| 靖江市| 平谷区| 西盟| 德钦县| 沐川县| 宜州市| 云浮市| 汉阴县| 遂溪县| 宝鸡市| 遵义市| 大荔县| 蓝田县| 姜堰市| 三河市| 本溪市| 乌什县| 麟游县| 迭部县| 嘉黎县| 河源市| 柏乡县| 勐海县| 无极县| 无极县| 拜城县|