C#程序加密与解密Demo程序示例

目录

一、加密程序功能介绍

1、加密用途

2、功能

3、程序说明

4、加密过程

5、授权的注册文件保存方式

二、加密程序使用步骤

1、步骤一

​编辑2、步骤二

3、步骤三

4、步骤四

三、核心代码说明

[1、获取电脑CPU 信息](#1、获取电脑CPU 信息)

2、获取硬盘卷标号

3、机器码生成

[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

相关推荐
scimence1 小时前
DeepSeek API接口调用示例(开发语言C#,替换其中key值为自己的key值即可)
开发语言·人工智能·c#·api接口·deepseek
一个会的不多的人4 小时前
C# NX二次开发:投影曲线和偏置曲线UFUN函数详解
java·开发语言·前端·c#
可喜~可乐9 小时前
SQLite数据类型
数据库·sql·sqlite·c#
冰茶_12 小时前
WPF之面板特性
microsoft·微软·c#·wpf·布局系统
狗屁不会还不知上进的咸鱼14 小时前
C#中不能通过new关键字创建实例的情况
c#
VB.Net15 小时前
C# 综合示例 库存管理系统20 操作员管理(FormAdmin)
开发语言·数据库·c#
Kai-爱记录17 小时前
C#中读取文件夹(包含固定字样文件名)
开发语言·c#
bicijinlian19 小时前
多语言笔记系列:Polyglot Notebooks 中使用扩展库
jupyter·c#·polyglot·notebooks·c# jupyter·.net jupyter·.net notebook
red-fly19 小时前
c#OdbcDataReader的数据读取
开发语言·sqlserver·c#
冰茶_19 小时前
WPF之布局流程
microsoft·微软·c#·wpf·布局系统