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

相关推荐
用户3721574261355 小时前
C# 实现 Excel 单元格保护:锁定公式并允许编辑指定区域
c#·ai编程·编程语言
公子小六10 小时前
基于.NET的Windows窗体编程之WinForms数据持久化(1)
windows·microsoft·c#·.net·winforms
三雷科技11 小时前
第6章第4节:自定义分词器
开发语言·c#
zhanghaha131412 小时前
C# 系列教程_12 字符串 string 保姆级系统教程(面向新手,大量示例 + 原理讲解)
开发语言·数据库·c#
Coder_Shenshen1 天前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
寂寞的船1 天前
【Unity知识速递】第10期 Unity GC 零分配实战:从 UnityEngine.Pool 到手动 GC 控制的全链路优化
jvm·unity·c#·游戏引擎·lucene
1-1=02 天前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
波力海苔夹心脆6753 天前
C# WPF 资源字典详解:ResourceDictionary、MergedDictionaries 与自定义控件案例
开发语言·c#·wpf·入门教程·resource·资源字典
AI导出鸭PC端3 天前
Perplexity批量导出没有PDF模式?AI导出鸭插件补上最后一块拼图
人工智能·pdf·c#·ai导出鸭
Risehuxyc3 天前
C# 选用更流行的语言版本
c#