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

相关推荐
vil du5 分钟前
C# string和其他引用类型的区别
c#
向宇it2 小时前
【blender小技巧】Blender导出带贴图的FBX模型,并在unity中提取材质模型使用
开发语言·unity·c#·游戏引擎·blender·材质·贴图
大模型铲屎官4 小时前
# Unity动画控制核心:Animator状态机与C#脚本实战指南 (Day 29)
c语言·unity·c#·游戏引擎·游戏开发·动画控制·animator状态机
安全菜鸟4 小时前
DeepSeek 接入 Word 完整教程
开发语言·c#·word
vil du5 小时前
c# AI编程助手 — Fitten Code
开发语言·c#·ai编程
努力长头发的程序猿5 小时前
UnityUI:Canvas框架获取鼠标悬浮UI
unity·c#
zxy28472253015 小时前
.NET MAUI教程2-利用.NET CommunityToolkit.Maui框架弹Toast
c#·.net·maui·toolkit.maui
liwulin05066 小时前
【WORD】批量将doc转为docx
开发语言·c#·word
围垦8 小时前
C# visionpro联合编程中遇到的问题之 R6025 - pure virtual function call
数码相机·c#·visual studio
码观天工9 小时前
.NET 原生驾驭 AI 新基建实战系列(三):Chroma ── 轻松构建智能应用的向量数据库
ai·c#·.net·向量数据库