軟體加密軟體註冊通用技術簡述

來源:互聯網
上載者:User

在我們編寫好一款軟體後,我們不想別人盜用我們的軟體,這時候我們可以採用註冊的方式來保護我們的作品。這時候我們可能就需要簡單瞭解一下加密解密技術,下面是我的簡單總結:

第一步:程式獲得運行機的唯一標示(比如:網卡號,CPU編號,硬碟號等等)。

第二步:程式將獲得的唯一標示加密,然後有使用者或者程式將加密後的標示發送給你。

第三步:你將加密後的標示解密(其實這時候你獲得的就是:網卡號,CPU編號,硬碟號)然後你再將網卡號,CPU編號,硬碟號加密發送給客戶端註冊。

第四步:程式將你發送的註冊號進行解密,解密後的編號其實也是:網卡號,CPU編號,硬碟號。

第五步:每當程式啟動,首先解密你發送的註冊號,然後讀取網卡號,CPU編號,硬碟號等等,最好進行驗證,看兩個標示是否一樣。

具體執行個體看代碼:

第一步:程式獲得運行機的唯一標示:硬碟號,CPU資訊
 

  1.         //擷取硬碟號
  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.         //加密
  2.        static public string Encrypt(string PlainText)
  3.         {
  4.             string KEY_64 = "dafei250";
  5.             string IV_64 = "DAFEI500";
  6.             byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
  7.             byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
  8.             DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
  9.             int i = cryptoProvider.KeySize;
  10.             MemoryStream ms = new MemoryStream();
  11.             CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
  12.             StreamWriter sw = new StreamWriter(cst);
  13.             sw.Write(PlainText);
  14.             sw.Flush();
  15.             cst.FlushFinalBlock();
  16.             sw.Flush();
  17.             return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
  18.         }

第三步:你將加密後的標示解密(註冊的時候解密)

  1.         //解密
  2.         public static string Decrypt(string CypherText)
  3.         {
  4.             string KEY_64 = "haeren55"; //必須是8個字元(64Bit)
  5.             string IV_64 = "HAEREN55";  //必須8個字元(64Bit)
  6.             try
  7.             {
  8.                 byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
  9.                 byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
  10.                 byte[] byEnc;
  11.                 try
  12.                 {
  13.                     byEnc = Convert.FromBase64String(CypherText);
  14.                 }
  15.                 catch
  16.                 {
  17.                     return null;
  18.                 }
  19.                 DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
  20.                 MemoryStream ms = new MemoryStream(byEnc);
  21.                 CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
  22.                 StreamReader sr = new StreamReader(cst);
  23.                 return sr.ReadToEnd();
  24.             }
  25.             catch { return "無法解密!"; }
  26.         }

第四步第五步就不用具體說了吧。另外:如需轉載請註明出處:半支煙阿傑。http://blog.csdn.net/gisfarmer/ 謝謝。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。