1. 程式人生 > 實用技巧 >C#關於獲取硬碟號、CPU資訊,加密解密技術

C#關於獲取硬碟號、CPU資訊,加密解密技術

本篇內容來自https://blog.csdn.net/gisfarmer/article/details/3733153

在我們編寫好一款軟體後,我們不想別人盜用我們的軟體,這時候我們可以採用註冊的方式來保護我們的作品。這時候我們可能就需要簡單瞭解一下加密解密技術,下面是我的簡單總結:
第一步:程式獲得執行機的唯一標示(比如:網絡卡號,CPU編號,硬碟號等等)。
第二步:程式將獲得的唯一標示加密,然後有使用者或者程式將加密後的標示傳送給你。
第三步:你將加密後的標示解密(其實這時候你獲得的就是:網絡卡號,CPU編號,硬碟號)然後你再將網絡卡號,CPU編號,硬碟號加密傳送給客戶註冊。
第四步:程式將你傳送的註冊號進行解密,解密後的編號其實也是:網絡卡號,CPU編號,硬碟號。
第五步:每當程式啟動,首先解密你傳送的註冊號,然後讀取網絡卡號,CPU編號,硬碟號等等,最好進行驗證,看兩個標示是否一樣。
具體例項看程式碼:
第一步:程式獲得執行機的唯一標示:硬碟號,CPU資訊

//獲取硬碟號<script type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5018464"; alimama_type="f"; alimama_sizecode ="tl_1x1_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; </script> <script src="
http://a.alimama.cn/inf.js" type=text/javascript> </script> private string GetDiskID() { try { //獲取硬碟ID String HDid = ""; ManagementClass mc = new ManagementClass("Win32_DiskDrive"); ManagementObjectCollection moc = mc.GetInstances(); foreach (ManagementObject mo in moc) { HDid
= (string)mo.Properties["Model"].Value; } moc = null; mc = null; return HDid; } catch { return ""; } finally { } } //獲取CPU資訊 private string GetCpuInfo() { try { string cpuInfo = "";//cpu序列號 ManagementClass cimobject = new ManagementClass("Win32_Processor"); ManagementObjectCollection moc = cimobject.GetInstances(); foreach (ManagementObject mo in moc) { cpuInfo = mo.Properties["ProcessorId"].Value.ToString(); } return cpuInfo; } catch { this.senRegeditID.Enabled = false; this.GetId.Enabled = true; } return ""; }

第二步:程式將獲得的唯一標示加密

//加密 <script type="text/JavaScript"> alimama_pid="mm_10249644_1605763_5027492"; alimama_type="f"; alimama_sizecode ="tl_1x5_8"; alimama_fontsize=12; alimama_bordercolor="FFFFFF"; alimama_bgcolor="FFFFFF"; alimama_titlecolor="0000FF"; alimama_underline=0; alimama_height=22; alimama_width=0; </script> <script src="http://a.alimama.cn/inf.js" type=text/javascript> </script>
static public string Encrypt(string PlainText)
{
  string KEY_64 = "dafei250";
  string IV_64 = "DAFEI500";
  byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
  byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
  DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
  int i = cryptoProvider.KeySize;
  MemoryStream ms = new MemoryStream();
  CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write);
  StreamWriter sw = new StreamWriter(cst);
  sw.Write(PlainText);
  sw.Flush();
  cst.FlushFinalBlock();
  sw.Flush();
  return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}

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

 //解密
public static string Decrypt(string CypherText)
{
  string KEY_64 = "haeren55"; //必須是8個字元(64Bit)
  string IV_64 = "HAEREN55";  //必須8個字元(64Bit)
  try
  {
    byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64);
    byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64);
    byte[] byEnc;
    try
    {
      byEnc = Convert.FromBase64String(CypherText);
    }
    catch
    {
      return null;
    }
    DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
    MemoryStream ms = new MemoryStream(byEnc);
    CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read);
    StreamReader sr = new StreamReader(cst);
    return sr.ReadToEnd();
  }
  catch { return "無法解密!"; }
}