网站首页  词典首页

请输入您要查询的论文:

 

标题 基于矩阵加密生成软件注册码的设计与应用
范文

    李锟华 杜英国 桑志强

    摘要:该文通过程序对计算机设备信息进行提取,生成该计算机唯一的机器码。软件开发者使用机器码和矩阵进行加密,生成一个包含有加密矩阵信息的注册码,提供给用户注册使用。注册码中包含了加密矩阵信息,所以每个注册码均可以灵活使用随机矩阵进行加密。用户通过注册码还原出机器码,和当前的计算机设备信息进行比较,检查运行的计算机是否经过授权,从而对软件版权进行有效的保护。

    关键词:机器码;注册码;矩阵加密

    中图分类号:TP18 文献标识码:A 文章编号:1009-3044(2017)33-0110-03

    Abstract: In this paper, the computer equipment information is extracted and the only machine code of the computer is generated. The software developer USES the machine code and the matrix to encrypt it, and generates a registration code that contains information about the encrypted matrix, which is provided to the user for registration. Encryption matrix information is included in the registration code, so each registration code can be encrypted using random matrix.The user can restore the machine code by the registration code, compare with the current computer equipment information, check whether the running computer is authorized, and thus effectively protect the software copyright.

    Key words: Machine code; registration code; matrix encryption

    1 背景

    隨着计算机技术的不断发展,计算机被广泛应用于生产和生活。当计算机普及的同时,软件的版权侵权行为出现的概率也越来越多。如何有效保证计算机软件的版权不受侵犯,保护软件开发设计者和软件开发商的权益,是计算机软件行业共同面临的问题。

    目前,对于软件的侵权行为主要集中在一些授权软件,应该在相应约定的计算机上运行,然而授权软件经过一些用户解密或破解后,让它在多台未授权计算机上免费运行,让软件开发商和软件设计者造成巨大损失。如何避免类似情况发生,开发者通常用加密手段进行版权保护,其中通过注册码进行授权就是一种简单而又有效的方法。注册码授权就是通过程序获得机器设备基本信息生成机器码,用户把机器码发送给软件设计者或软件开发商,软件设计者或软件开发商生成该设备对应的注册码提供给用户使用,通过注册码校验判断是否为授权计算机,从而有效保护软件的版权。本文以Visual Basic.net平台为例,利用矩阵对机器码和注册码进行加密和解密,为有效保护计算机软件的版权提供一种简单有效的方法。

    2 生成注册码的设计思想

    通过Visual Basic.net平台,读取授权机器的中央处理器,硬盘,网卡MAC的序列号,这三组信息对于每个设备都是唯一的[1]。程序通过这三组信息,生成对应的ASCII编码,形成该机器的机器码,该机器码也是唯一的。用户将机器码发送给软件设计者和软件开发商,开发商通过矩阵加密方式生成相应的注册码,注册码中包含了硬件加密的信息和加密矩阵的信息。将生成注册码发送给用户,用户就可以正常注册成功该软件。当用户登录使用软件时,程序将提取该计算机的硬件信息组成机器码,将包含有加密矩阵信息的注册码进行分解,让注册码矩阵和加密矩阵的逆矩阵进行运算,得出曾经注册过的机器码,和现有的机器码进行比较,完全一致,则可以使用该授权软件,否则软件无法运行[2]。

    3 生成注册码设计与实现

    3.1 读取设备信息的方法

    3.1.1 读取CPU的序列号信息方法

    利用Visual Basic.net平台,读出当前计算机CPU的序列号存放入st1字符串变量中。

    Dim Wmi1 As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_Processor")

    Dim Uint1 As String

    For Each WmiObj1 As ManagementObject In Wmi1.Get

    Uint1 = WmiObj1("ProcessorId")

    Next

    st1 = Uint1

    3.1.2 读取硬盘序列号的方法

    利用Visual Basic.net平台,读出当前计算机硬盘的序列号存放入st2字符串变量中。

    Dim cmicWmi1 As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive")

    Dim Uint1 As UInt32

    j = 0

    For Each cmicWmiObj1 As ManagementObject In cmicWmi1.Get

    Uint1 = cmicWmiObj1("signature")

    str(j) = Uint1.ToString

    j = j + 1

    Next

    st2 = str(0)

    3.1.3 读取网卡mac地址的方法

    利用Visual Basic.net平台,读取当前计算机网卡的mac存放入st3字符串变量中。

    Dim Wmi1 As New System.Management.ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration")

    Dim Uint1 As String

    j = 0

    For Each WmiObj1 As ManagementObject In Wmi1.Get

    If WmiObj1("IPEnabled") = True Then

    Uint1 = Trim(WmiObj1("MacAddress"))

    str(j) = Uint1

    j = j + 1

    End If

    Next

    st3 = str(0)

    3.2 生成机器码方法

    将以上程序获得的计算机CPU序列号,硬盘序列号和网卡mac地址,组成一个字符串,然后,将字符串中每个字符转换成相应ASCII编码数值,加入“-”组成当前的机器码,存入sss字符串变量中,该字符串就是生成的机器码。

    Dim i, j, k As Integer

    Dim sss As String = ""

    st4 = st1 + st2 + st3

    k = 1

    For i = 0 To 7

    For j = 0 To 7

    If k <= Len(st1 + st2 + st3) Then

    sss = sss + Asc(Mid(st4, k, 1)).ToString + "-"

    k = k + 1

    End If

    Next

    Next

    3.3 生成注册码和还原机器码的方法

    3.3.1 生成注册码和还原机器码的原理

    当开发人员获得要授权的计算机机器码后,开发者通过机器码生成注册码。目前,CPU序列号,硬盘序列号和网卡mac地址字符总数一般不会超过64个字符,我们选用8×8矩阵进行加密处理。首先将机器码转化成8×8的机器码矩阵,通过和一个随机产生有逆矩阵的8×8加密矩阵进行相乘后,获得注册码矩阵,即:A机器码矩阵×M加密矩阵=A注册码矩阵。将注册码矩阵转换成注册码,同时将随机加密矩阵的信息转换成ASCII数值进行数值加密,附加到注册码后面,形成一个带有加密矩阵信息的注冊码。

    当用户获得注册码后,输入计算机即可获得成功授权。当用户使用该授权软件登录时,通过带有加密矩阵信息的注册码,分解出注册码矩阵和加密矩阵,通过加密矩阵求出加密矩阵的逆矩阵[3],然后用注册码矩阵和加密矩阵的逆矩阵相乘,即可求出机器码矩阵,即:A注册码×M加密矩阵的逆矩阵=A机器码,从而还原出机器码。将该机器码和目前计算机CPU序列号,硬盘序列号和网卡mac信息生成的本机机器码相互比较,判断是否为授权的计算机。

    3.3.2 机器码加密生成注册码的设计

    当开发者获得机器码后,将机器码转化成8×8的矩阵,存入a(8,8)二维数组,将随机产生的加密矩阵存入b(8,8)数组,把a数组和b数组按照矩阵相乘的规则运算,将结果存入c(8,8)数组。通过c(8,8)数组生成注册码存入str1字符串变量之中,然后将加密矩阵每个元素乘以任意一个加密数值(本例以20为加密数值),然后转换成字符串,连接到str1之后,两者之间用”AA”字符作为分隔符,str1就是带有加密矩阵信息的注册码。

    Dim i, j, k As Integer

    Dim str1 As String = ""

    For i = 0 To 7

    For j = 0 To 7

    For k = 0 To 7

    c(i, j) = c(i, j) + a(i, k) * b(k, j)

    Next

    If c(i,j)<>0 Then

    str 1 = str 1 + c(i, j).ToString + "-"

    End If

    Next

    Next

    str2 = str2 + "AA-"

    For i = 0 To 7

    For j = 0 To 7

    str2 = str2 + (b(i, j)*2).ToString + "-"

    Next

    Next

    3.3.3 注册码解密生成机器码的设计

    当用户获得注册码注册成功后,每次启动该授权软件,程序将取出带有加密矩阵的注册码,以“AA”作为分隔符,将该注册码分解成注册码部分和加密矩阵部分,将注册码转换成注册码矩阵存入c(8,8)数组,将加密矩阵的每个元素除以加密数值(本例以20为加密数值),求出加密矩阵的逆矩阵存入d(8,8)数组,把c数组和d数组按照矩阵相乘的规则运算,将结果存入e1(8,8)数组。通过e1(8,8)数组生成机器码放入str2字符串变量。将目前使用的计算机硬件信息读出,生成机器码str3字符串变量,和str2进行验证,判断是否为软件授权的计算机。

    Dim i, j, k As Integer

    Dim str2 As String = ""

    For i = 0 To 7

    For j = 0 To 7

    For k = 0 To 7

    e1(i, j) = (e1(i, j) + c(i, k) * d(k, j))

    Next

    e1(i, j) = Math.Round(e1(i, j), 0)

    If e1(i, j) <> 0 Then

    str2 = str2 + e1(i, j).ToString + "-"

    End If

    Next

    Next

    4 矩阵加密生成注册码的结果与分析

    4.1 读取设备序列号和机器码的运行结果(如图1所示)

    

    图1 设备序列号和生成机器码

    当前的计算机CPU序列号为: BFEBFBFF000206A7

    硬盘序列号为:2156105262

    网卡mac为:60:D8:19:C7:E0:83

    生成的机器码为:

    66-70-69-66-70-66-70-70-48-48-48-50-48-54-65-55-50-49-53-54-49-48-53-50-54-50-54-48-58-68-56-58-49-57-58-67-55-58-69-48-58-56-51-

    4.2 将机器码加密生成注册码的运行结果(如图2所示)

    

    图2 注册码的生成

    输入机器码后,转换成矩阵,和加密矩阵相乘后得到注册码矩阵,加入加密矩阵信息后,生成的注册码为:

    349-407-612-682-415-617-477-687-254-296-453-523-319-474-361-540-251-303-454-504-305-458-356-503-286-332-504-574-330-494-396-580-264-344-510-552-329-539-411-569-51-165-272-274-165-221-109-165-AA-0-20-20-40-20-20-20-20-0-20-40-20-20-40-0-20-20-20-40-40-20-20-20-20-0-20-20-0-0-20-20-0-40-20-0-0-0-20-40-20-0-20-40-40-0-20-20-40-0-0-0-20-20-40-20-40-40-0-20-40-40-0-0-40-

    其中“AA”之前的为注册码信息,“AA”之后的为加密矩阵信息。

    4.3 将注册码解密生成机器码的运行结果(如图3所示)

    软件注册成功后,每次登录软件,注册码转换成注册码矩阵和加密矩阵,使注册码矩阵和加密矩阵的逆矩阵相乘后得到机器码,生成的机器码为:

    66-70-69-66-70-66-70-70-48-48-48-50-48-54-65-55-50-49-53-54-49-48-53-50-54-50-54-48-58-68-56-58-49-57-58-67-55-58-69-48-58-56-51-

    此时,得到的机器码和目前使用的机器码一致,判断是软件授权的计算机。

    5 结束语

    本文利用程序获取机器的硬件信息,组成机器码,通过机器码矩阵和加密矩阵相乘运算生成注册码,让注册码矩阵和加密矩阵的逆矩阵相乘还原得到机器码,这种方法既简单而又有效。同时注册码中包含了加密矩阵的信息,对传统固定的加密矩阵生成注册码方法进行了改进,可以实现不同计算机的注册码使用不同的矩阵加密,进一步提高了注册码的安全性和可靠性。该种方法在软件的版权保护和知识产权的保护中可以得到广泛应用。

    参考文献:

    [1] 何定华. 基于CPU序列号和加密技术的软件注册机[J]. 科技导报, 2012, 30(2):36-38.

    [2] 周蓉. 在Visual Basic中运用矩阵实现字符串的加密[J]. 四川职业技术学院学报, 2004(3):92-94.

    [3] 郭承志. n阶矩阵逆矩阵的求解算法及其实现[J]. 电脑知识与技术, 2012(14):3418-3425.

    [4] 陈珊, 葛艳玲, 石峰. 一种實现软件注册码的非对称加密算法[J]. 电脑知识与技术, 2007(17):190-193.

    [5] 魏彦. 软件的加密——注册码实现原理[J]. 信息技术与信息化, 2016(6):129-131.

    [6] 曹淑琴, 刘洋, 郑成龙. 一种基于RSA算法的安全注册码系统设计[J]. 中国科技信息, 2014(1):94.

    [7] 郑羽, 杨春生, 于江. 加密与解密实战入门[M]. 北京: 电子工业出版社, 2006.

    [8] 段钢. 加密与解密[M]. 北京: 电子工业出版社, 2008.

    

    

随便看

 

科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/12/17 2:53:00