C#序列号的设计不重复的实现方法是什么

技术C#序列号的设计不重复的实现方法是什么这篇文章主要介绍“C#序列号的设计不重复的实现方法是什么”,在日常操作中,相信很多人在C#序列号的设计不重复的实现方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操

本文主要介绍“C#序列号非重复设计的实现方法是什么”。在日常操作中,相信很多人对C#序列号非重复设计的实现方法有所怀疑。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“C#序号非重复设计的实现方法是什么”的疑惑!接下来,请和边肖一起学习!

序列号设计

作为序列号软件的许可方式之一,它被广泛应用于应用软件中。主要考虑这几个方面:1。毕竟知识产权保护需要脑力劳动和体力劳动。2.增加商业竞争中的防御能力,防止竞争对手窃取。3.增强合同效力,防止对方以各种理由破坏合作机制。

基于以上几个方面,有必要从保护和防御思维方式的角度,增加序列号功能。每个作者或公司设计序列号的方式不同,这就是为什么我们可以增加这个功能。

00-1010序列号越短越好。

主要是从成本的角度。例如,用户需要现场正版软件的序列号。如何将序列号信息传递给用户?假设我们以对称或非对称的方式生成一个长序列号。如果我们口头告诉对方,那么对方必须用纸和笔记录下来,最后输入软件后可能不正确。如果序列号以文件的形式通过网络传输给对方,需要占用网络资源,对方的电脑不一定有网络环境。无论如何,长序列号的生成和传输可能涉及的成本包括:材料成本、流动成本、人工成本和时间成本。

如果一个字符能表达序列号所要求的完整信息,那是最理想的。但是,这是一个理想的状态,这是不可能的,至少以我现在的能力。因此,序列号的所有信息都应该用最佳长度来表示。

为了避免混淆字符,会生成一个序列号并发送给用户。序列号包括:数字0和字母O,数字1和字母l,不让用户反复尝试?这种用户体验太差了。虽然你不说,但至少你不觉得舒服。

14.1 设计原则

设计的思路取决于序列号应该实现什么样的功能和属性。从功能上看,它包括:1。计算机的序列号;2.虽然输入条件相同,但每次生成的序列号不同;3.核实使用期限;4.序列号有注册时间限制。如果超过指定的使用时间,序列号将无效,以避免在短时间内多次注册。从属性上来看,包括:同一台计算机生成的序列号和相同的输入条件是不同的。

考虑到上述因素,序列号长度为25个字符,序列号生成格式和元素信息如下:

C#序列号的设计不重复的实现方法是什么

X01-X05:是电脑的特征码,一个5位数的字符串,可以得到机器某个部件的ID。这部分可能是CPU、网卡、硬盘等信息。ID用MD5加密后,前5个字符作为特征码,实现一机一码。这样,格局可能会有同样的情况,但概率很小。

X06-X13:是序列号生成的日期,8位字符串,格式为yyyyMMdd。结合后期使用时限使用,验证软件的使用寿命。

X14-X15:是注册时限,2位数字,从序列号生成之日算起。如果超过此注册时间限制,序列号将无法正常注册。

X16-X20:使用时限的5位字符,与序列号生成日期一起使用,以验证软件的使用寿命。

X21:是序列号的偏移量,1位字符。无论什么场景,序列号的偏移量每次都不一样。

X22-X25:预留数据位,暂时不用。自定义一个序列号字典信息,例如:_ dictionary=' JCB 8e 2h 7k 6 MVP 9qr 3tx wy4 ',并删除混淆字符。这个可以定制。序列号的每个部分将字典移动随机产生的偏移量(X21),并根据与字典对应的输入数字信息的下标提取相应的字符作为序列号的字符。

生成序列号的一般过程:

在字典信息的长度范围内随机生成一个偏移量。

根据偏移量向左或向右循环字典。

根据输入的数字信息,如2015年的2,作为下标,从字典信息中提取对应的字符。

反向解析的大致过程类似。它只需要根据X21字符匹配字典中的字符,并以对应的下标作为偏移量,就可以对所有信息进行反向解析。

14.2 设计思想

nbsp; 代码实现

1.MD5操作类:

1234567891011121314 public
          class
         Safety
       {
         

              
         public
         static
         string
         MD5(
         string
          str)
              
         {
         

                     
         string
         strResult =
         ""
         ;
                     
         MD5 md5 = System.Security.Cryptography.MD5.Create();
                     
         byte
         [] bData = md5.ComputeHash(Encoding.Unicode.GetBytes(str));
                     
         for
         (
         int
          i = 0; i < bData.Length; i++)
                     
         {
         

                            
         strResult = strResult + bData[i].ToString(
         "X"
         );
                     
         }
                     
         return
         strResult;
              
         }
       }
       

2.注册信息类:

12345678910111213141516 public
          class
         RegInfo
       {
         

              
         public
         RegInfo()
              
         {
         

                     
         KeySn =
         ""
         ;
                     
         Date=DateTime.MinValue;
                     
         RegLimitDays = 0;
                     
         UseLimitDays = 0;
                     
         Offset = 0;
              
         }
              
         public
         string
         KeySn {
         get
         ;
         set
         ; }
              
         public
         DateTime Date {
         get
         ;
         set
         ; }
              
         public
         int
         RegLimitDays {
         get
         ;
         set
         ; }
              
         public
         int
         UseLimitDays {
         get
         ;
         set
         ; }
              
         public
         int
         Offset {
         get
         ;
         set
         ; }
       }
       

3.偏移操作类型:

12345 internal
         enum
         OffsetType
       {
         

              
         Left,
              
         Right
       }
       

4.        序列号管理类

+ View Code

14.4     代码混淆

   从安全角度来讲,.NET程序如果不加混淆的话,很容易被反编译出源代码的。从专业角度来讲,即使增加了序列号功能,也无济于事,专业的人员分分钟可以破解掉,尽管这样干的人很少,但是存在这种可能性。如果一个软件人员想了解一个很好的软件,第一反映可能就是反编译。

   对于公司或商业使用的软件来讲,增加混淆还是有必要的,尽管现在开源很流行。

14.5     代码破解

    不管.NET程序如何进行混淆,理论上都是可以破解的,理论的东西就不赘述了。通常接触过的破解方式有两种:注册机方式和暴力方式。

    注册机的方式,需要通过软件的验证序列号的过程和机制反向推算出序列号的生成算法,根据反推的算法开发一个小软件,用于生成脱离作者授权生成序列号。这种方式不会破坏程序本身的代码,相对温和。暴力的方式,就是找到序列号验证部分的代码,通过删除或绕过验证代码等方式不让代码有效执行。这种方式会对程序本身的代码进行改动,所以也存在一些风险。

14.6     小结

     实现序列号有多种方式,上述方式不一定最好,但是希望对开发者有一定帮助。

最终实现效果图如下:

C#序列号的设计不重复的实现方法是什么

到此,关于“C#序列号的设计不重复的实现方法是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/118933.html

(0)

相关推荐

  • Linux中zabbix如何安装配置及应用

    技术Linux中zabbix如何安装配置及应用这篇文章主要介绍了Linux中zabbix如何安装配置及应用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Z

    攻略 2021年11月15日
  • 好英语怎么说,好的,谢谢。用英语怎么说

    技术好英语怎么说,好的,谢谢。用英语怎么说“好的”用英语表示有以下几个:good [ɡʊd]adj.合意的好英语怎么说,满意的;合格的;胜任的;善的;有德行的;让人高兴的;令人愉快的;令人满意的;彻底的n.善;正义;好处

    生活 2021年10月27日
  • Python Scrapy爬虫框架如何使用

    技术Python Scrapy爬虫框架如何使用本篇内容介绍了“Python Scrapy爬虫框架如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

    攻略 2021年11月23日
  • WPF设置列内容居左、中、右

    技术WPF设置列内容居左、中、右 WPF设置列内容居左、中、右Style内容Style x:Key="contentLeftStyle" TargetType="{x:Type TextBlock}"S

    礼包 2021年12月18日
  • MySQL怎么使用event进行自动分表

    技术MySQL怎么使用event进行自动分表这篇文章给大家分享的是有关MySQL怎么使用event进行自动分表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 新单位

    攻略 2021年11月2日
  • 仙宗十友,宋之问是武则天的朋友吗

    技术仙宗十友,宋之问是武则天的朋友吗宋之问(约656年-约712年)仙宗十友,字延清,名少连,唐汾州隰城人(今山西汾阳市)人,一说虢州弘农(今河南灵宝)人,初唐时期的诗人,与沈佺期并称“沈宋”,仙宗十友之一。
    唐高宗上元

    生活 2021年10月19日