基于机器特征码和时间戳的软件注册机制的设计与实现

2020-07-03 04:00
科学技术创新 2020年19期
关键词:密文解密加密

周 敏 徐 刚

( 江苏省靖江中等专业学校,江苏 靖江214500)

1 概述

笔者在与本地企业合作研发安防产品时, 对监控场所的被监控设备的操作是一件涉及到安全的行为,只有经过授权的操作员才能执行操作并日志记录;另外,第三方平台有时需要与安防监控系统进行整合,经过授权的第三方可以在授权时间内通过调用开发包来直接监控被监控设备。

基于机器特征码和时间戳的软件注册机制可以实现上述功能需求, 控制操作员和第三方在授权范围内使用相应功能。 基于机器特征码的注册码可以控制软件只能在指定计算机上运行,不仅控制了操作权限,还有效避免了软件的肆意拷贝;基于时间戳的注册码不仅可以控制软件运行的有效期,还能保障合同条款的有效履行。

2 注册机制的设计

2.1 总体思路

根据实际需求, 软件安装完成后需要注册才能获得核心监控功能, 用户将软件注册界面中的机器特征码提供给笔者,笔者基于机器特征码和时间戳生成注册码文件返回给用户,用户导入注册码文件即可正常进行设备的监控操作。

2.2 生成机器特征码的思路

机器特征码是基于所安装软件的计算机的软、 硬件信息经过复杂加密运算得到的32 位长度的一串代码,生成机器特征码的过程中要考虑以下问题:

2.2.1 软、硬件信息的来源

通常情况下,计算机中CPU、硬盘、主板和内存条都有唯一的序列号,网卡也有唯一的MAC 地址,这些硬件基本信息可以作为机器特征码的基础数据来源。

笔者在考虑软件信息来源时只考虑了提取注册用户的单位名称。

2.2.2 加密算法的设计

为了使机器特征码具有较好的安全性, 加密过程采用了8轮Base64 和32 位MD5 加密,初始密文( 即明文)由软、硬件信息和一些特殊字符按特定的格式组合而成,每轮在上轮密文基础上进行一次Base64 加密和不少于1 次的MD5 加密,MD5 加密次数由Base64 加密结果的ASCII 码之和对16 的余数决定。经过8 轮加密后的密文有32 位长, 然后根据最后一位密文字符,从16 种换位算法中选择一种算法重组机器特征码。 流程图如图1 所示。

2.3 生成注册码的思路

注册码由机器特征码和时间戳经过RSA 加密生成,其中时间戳是软件授权使用的截止时间。

RSA 加密算法是一种在公开密钥加密和电子商业中被广泛使用的非对称加密算法,RSA 加密体制中包含一对秘钥, 即公钥和私钥,加密算法可以使用其中一个对明文进行加密,使用另一个对密文进行解密。

笔者生成了50 对秘钥形成秘钥池, 根据机器特征码的ASCII 码之和对50 的余数选择具体使用哪一对秘钥进行加、解密运算。

3 注册机制的实现

笔者采用C# 语言在Visual Studio 2010 环境中进行软件的研发。

3.1 注册功能的实现

软件的注册界面如图2 所示。

图2

32 位机器码按四位一组的形成显示在注册界面中, 用户点击“ 复制机器码”按钮将机器码贴到剪贴板即可发送给笔者;点击“ 导入注册文件”可以将包含注册码的文本文件保存到软件的安装文件夹中。

3.1.1 机器码的提取

C# 语言提供了ManagementClass 类来获取本机的一些基本信息,这个类是一个通用信息模型( CIM)管理类,该管理类是WMI 类, 其中Win32_Process 可以获取CPU 的基本信息,Win32_NetworkAdapterConfiguration 可以获取网卡的基本信息,WIN32_BaseBoard 可以获取主板的基本信息, Win32_DiskDrive可以获取硬盘的基本信息,Win32_PhysicalMemory 可以获取内存的基本信息。 以获取CPU 的序列号为例,代码如下:

3.1.2 注册码的验证

用户在导入注册码文件后,软件会重新验证注册码信息。首先对注册码进行Base64 解密, 然后根据机器特征码选择RSA公钥池中正确的解密秘钥,对注册码进行RSA 解密,解密后的注册码如果不符合指定格式则提示“ 注册文件非法”,接着验证机器特征码和时间戳,均通过验证后可以使用软件或开发包的全部功能,否则切换成“ 试用版”禁用一些核心功能。 代码略。

3.2 注册码生成器的实现

注册码生成器的界面如图3 所示。

图3

选择用户软件的版本号,粘贴机器特征码,确定授权时间,点击“ 生成导出”即可生成注册码文件。 生成导出过程主要由初始RSA 秘钥池、选择秘钥、生成注册码和加密保存四步完成。

3.2.1 秘钥池的生成

秘 钥 池 由 100 对 秘 钥 组 成 ,C# 中 提 供 了RSACryptoServiceProvider 类可以很方便的产生RSA 密钥对,并进行RSA 加、 解密运算, 涉及到的方法主要有ToXmlString、FromXmlString、Encrypt 和Decrypt。 公钥和私钥分别保存在不同的文件中, 其中公钥池文件随软件发布给用户。 生成秘钥池的代码如下所示:

3.2.2 注册码文件的生成

从私钥池文件中读入秘钥, 根据机器特征码ASCII 之和对50 的余数选择加密秘钥,按指定格式拼接用户机器特征码和时间戳,然后调用Encrypt 方法对注册码进行RSA 加密,最后将密文再次Base64 加密转换成可显示的ASCII 字符保存。 代码略。

结束语

基于上述设计思路, 笔者在Windows 8.1 和Visual Studio 2010 开发环境中,实现了基于机器特征码和时间戳的软件注册机制。 因为每台计算机的软、硬件信息组合是唯一的,所以根据加密算法可知机器特征码、注册码也是唯一的,这样既保护了软件开发者的知识产权,也保护了用户的利益,同时加、解密过程中引用了多种算法,提高了机器特征码和注册码自身的安全性,实际应用中达到了良好的效果。

猜你喜欢
密文解密加密
一种支持动态更新的可排名密文搜索方案
一种新型离散忆阻混沌系统及其图像加密应用
基于模糊数学的通信网络密文信息差错恢复
炫词解密
解密“一包三改”
基于网络报文流量的协议密文分析方法
密钥共享下跨用户密文数据去重挖掘方法*
炫词解密
炫词解密
加密与解密