目錄
一、加密程序功能介紹
1、加密用途
2、功能
3、程序說明
4、加密過程
5、授權的注冊文件保存方式
二、加密程序使用步驟
1、步驟一
?編輯2、步驟二
3、步驟三
4、步驟四
三、核心代碼說明
1、獲取電腦CPU 信息
2、獲取硬盤卷標號
3、機器碼生成
3、?生成注冊碼
四、工程說明
1、用戶軟件
2、后臺解密軟件
五、程序工程打包下載
一、加密程序功能介紹
1、加密用途
對軟件權限加密可適用于設備催付款,限制使用日期。
2、功能
一臺機器一個注冊碼,每個碼都不一樣。加密后客戶嘗試修改電腦時間或者更換電腦均無效。
3、程序說明
Demo程序示例分為兩部分,用戶程序部分加密程序、一個是后臺權限注冊解密程序。
4、加密過程
讀取電腦CPU編碼、讀取電腦硬盤編碼,設置限定日期,生成注冊碼。注冊碼經過MD5加密,寫入注冊表、寫入硬盤本地。(刪除或者修改注冊表中或者硬盤中的任何一個文件都將導致用戶軟件無法使用)
5、授權的注冊文件保存方式
授權的注冊碼經過MD5加密技術加密后分別存儲在注冊表和本地硬盤中,經過MD5加密后的數據無法進行逆向解密。
在授權使用時間天數范圍內,用戶不能修改該注冊碼或者刪除文件,否則導致授權損壞用戶軟件無法使用軟件。
二、加密程序使用步驟
1、步驟一
在用戶程序中,將機器碼復制拷貝到解密程序中,設置授權使用天數。
(如果是永久授權使用,則授權天數輸入36500即可)
2、步驟二
解密程序中生成注冊碼
3、步驟三
將解密程序中生成的注冊碼復制到用戶軟件中,進行注冊
4、步驟四
注冊后重新啟動用戶程序,軟件生效
三、核心代碼說明
1、獲取電腦CPU 信息
每個CPU信息出廠后都是獨立且唯一的
/// <summary>/// 獲取電腦CPU信息的方法/// </summary>/// <returns></returns>public static 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;}
2、獲取硬盤卷標號
每個硬盤標號出廠后都是獨立且唯一的
///<summary>/// 獲取硬盤卷標號///</summary>///<returns></returns>public static string GetDiskVolumeSerialNumber(){ManagementClass mc = new ManagementClass("win32_NetworkAdapterConfiguration");ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");disk.Get();return disk.GetPropertyValue("VolumeSerialNumber").ToString();}
3、機器碼生成
根據CPU信息和硬盤標號,生成獨立唯一的機器碼。
機器碼使用MD5加密,
///<summary>/// 生成機器碼///</summary>///<returns></returns>public static string GetMNum(){string strNum = DES.DESEncrypt((DateTime.Now.ToString("MMdd") + Form1.DiskID+Form1.CpuID), "12345678", "87654321");string strMNum = strNum.Substring(0, 24).ToUpper(); //截取前24位作為機器碼return strMNum;}
3、?生成注冊碼
注冊碼保存使用MD5加密,
///<summary>/// 生成注冊碼///</summary>///<returns></returns>public static string GetRNum(){SetIntCode();string strMNum = GetMNum();for (int i = 1; i < charCode.Length; i++) //存儲機器碼{charCode[i] = Convert.ToChar(strMNum.Substring(i - 1, 1));}for (int j = 1; j < intNumber.Length; j++) //改變ASCII碼值{intNumber[j] = Convert.ToInt32(charCode[j]) + intCode[Convert.ToInt32(charCode[j])];}string strAsciiName = ""; //注冊碼for (int k = 1; k < intNumber.Length; k++) //生成注冊碼{if ((intNumber[k] >= 48 && intNumber[k] <= 57) || (intNumber[k] >= 65 && intNumber[k]<= 90) || (intNumber[k] >= 97 && intNumber[k] <= 122)) //判斷如果在0-9、A-Z、a-z之間{strAsciiName += Convert.ToChar(intNumber[k]).ToString();}else if (intNumber[k] > 122) //判斷如果大于z{strAsciiName += Convert.ToChar(intNumber[k] - 10).ToString();}else{strAsciiName += Convert.ToChar(intNumber[k] - 9).ToString();}}return strAsciiName;}
四、工程說明
1、用戶軟件
軟件界面和封裝的類,各個功能全部都是源代碼,沒有使用DLL封裝
在開發用戶軟件過程,該界面功能作為子窗口集成到開發的軟件中即可。
2、后臺解密軟件
五、程序工程打包下載
下載連接
https://download.csdn.net/download/panjinliang066333/90464924