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

相关推荐
江山如画,佳人北望13 小时前
C#程序入门
开发语言·windows·c#
与火星的孩子对话14 小时前
Unity进阶课程【六】Android、ios、Pad 终端设备打包局域网IP调试、USB调试、性能检测、控制台打印日志等、C#
android·unity·ios·c#·ip
future141214 小时前
C#每日学习日记
java·学习·c#
军训猫猫头17 小时前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net
葬歌倾城1 天前
JSON的缩进格式方式和紧凑格式方式
c#·json
Eiceblue1 天前
使用 C# 发送电子邮件(支持普通文本、HTML 和附件)
开发语言·c#·html·visual studio
小小小小王王王1 天前
hello判断
开发语言·c#
金增辉2 天前
基于C#的OPCServer应用开发,引用WtOPCSvr.dll
c#
future14122 天前
C#学习日记
开发语言·学习·c#
傻啦嘿哟2 天前
Python 办公实战:用 python-docx 自动生成 Word 文档
开发语言·c#