欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#程序加密與解密的流程步驟

 更新時間:2025年03月10日 09:02:39   作者:Big_潘大師  
文章介紹了一種基于CPU和硬盤編碼的C#程序加密方法,包括生成、驗證和保存注冊碼的過程,以及如何在用戶軟件和解密程序中實現(xiàn)這一功能,文中通過代碼示例和圖文講解的非常詳細,需要的朋友可以參考下

一、加密程序功能介紹

1、加密用途

對軟件權(quán)限加密可適用于設(shè)備催付款,限制使用日期。

2、功能

一臺機器一個注冊碼,每個碼都不一樣。加密后客戶嘗試修改電腦時間或者更換電腦均無效。

3、程序說明

Demo程序示例分為兩部分,用戶程序部分加密程序、一個是后臺權(quán)限注冊解密程序。

4、加密過程

讀取電腦CPU編碼、讀取電腦硬盤編碼,設(shè)置限定日期,生成注冊碼。注冊碼經(jīng)過MD5加密,寫入注冊表、寫入硬盤本地。(刪除或者修改注冊表中或者硬盤中的任何一個文件都將導(dǎo)致用戶軟件無法使用)

5、授權(quán)的注冊文件保存方式

授權(quán)的注冊碼經(jīng)過MD5加密技術(shù)加密后分別存儲在注冊表和本地硬盤中,經(jīng)過MD5加密后的數(shù)據(jù)無法進行逆向解密。

在授權(quán)使用時間天數(shù)范圍內(nèi),用戶不能修改該注冊碼或者刪除文件,否則導(dǎo)致授權(quán)損壞用戶軟件無法使用軟件。

二、加密程序使用步驟

1、步驟一

在用戶程序中,將機器碼復(fù)制拷貝到解密程序中,設(shè)置授權(quán)使用天數(shù)。

(如果是永久授權(quán)使用,則授權(quán)天數(shù)輸入36500即可)

2、步驟二

解密程序中生成注冊碼

3、步驟三

將解密程序中生成的注冊碼復(fù)制到用戶軟件中,進行注冊

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、獲取硬盤卷標(biāo)號

每個硬盤標(biāo)號出廠后都是獨立且唯一的

         ///<summary>
        /// 獲取硬盤卷標(biāo)號
        ///</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、機器碼生成

根據(jù)CPU信息和硬盤標(biāo)號,生成獨立唯一的機器碼。

機器碼使用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封裝

在開發(fā)用戶軟件過程,該界面功能作為子窗口集成到開發(fā)的軟件中即可。

2、后臺解密軟件

以上就是C#程序加密與解密的流程步驟的詳細內(nèi)容,更多關(guān)于C#程序加密與解密的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論