一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

授权方法、授权控制方法及装置、设备和介质与流程

2022-06-01 05:54:13 来源:中国专利 TAG:


1.本发明涉及计算机技术领域,尤其涉及软件功能模块的授权方法、授权控制方法及装置、设备和介质。


背景技术:

2.现有技术中,通常是在制作软件产品安装包时对软件产品的功能模块进行授权控制。这种授权控制方式的操作程序比较繁杂。具体而言,现有的软件功能模块的授权控制手段通常是根据用户的购买需求对软件产品进行打包操作,仅将用户购买的功能模块打包到软件产品中。这种做法具有明显的缺陷,根据用户购买需求进行打包会导致工作繁杂、容易出错。并且一旦用户想要使用额外的功能则需要重新打包和重新安装,增加了额外的工作量且用户体验不佳。


技术实现要素:

3.鉴于现有技术的以上问题,本技术实施例提供一种软件功能模块的授权方法、授权控制方法及装置、设备和介质,通过授权文件中对软件功能模块的授权许可信息,可以灵活控制用户所使用的软件产品功能,并且在用户需求变更时不必重新打包和安装软件产品,使得授权控制的操作更加便捷,提升了用户体验。
4.为达到上述目的,本技术第一方面提供了一种软件功能模块的授权方法,包括:
5.根据授权范围,生成对软件功能模块的授权许可信息;
6.将所述授权许可信息进行加密处理,生成授权文件;以及
7.设置授权控制插件,所述授权控制插件用于根据所述授权文件中的授权许可信息,在项目向导中将所述功能模块所属的项目显示或隐藏。
8.作为第一方面的一种可能的实现方式,将所述授权许可信息进行加密处理,生成授权文件,包括:
9.利用摘要算法对所述授权许可信息进行提取,生成第一散列码;
10.根据所述授权许可信息和所述第一散列码,生成密文内容;
11.利用摘要算法对所述密文内容和所述授权许可信息进行提取,得到第二散列码;
12.根据所述授权许可信息、所述密文内容和所述第二散列码,生成所述授权文件。
13.作为第一方面的一种可能的实现方式,根据所述授权许可信息和所述第一散列码,生成密文内容,包括:
14.利用非对称加密算法生成私钥和公钥;
15.利用所述私钥对所述授权许可信息进行加密;
16.利用对称加密算法对所述公钥进行加密;
17.将所述加密后的公钥、所述第一散列码和加密后的所述授权许可信息组合后进行分割,生成多组字符串;
18.利用混淆算法将所述多组字符串存入混淆码中,得到所述授权许可信息对应的密
文内容。
19.作为第一方面的一种可能的实现方式,上述方法包括:
20.在所述授权控制插件中设置授权许可查询接口,所述授权许可查询接口用于在所述功能模块被调用时读取所述授权文件。
21.作为第一方面的一种可能的实现方式,设置授权控制插件,包括:
22.创建活动元素,所述活动元素中包括属性测试器,所述属性测试器中的属性测试器变量设置为软件功能模块的授权许可信息;
23.创建活动模式绑定元素,所述创建活动模式绑定元素用于将项目向导中的项目创建窗口绑定到所述活动元素;
24.对所述属性测试器进行功能扩展,扩展后的所述属性测试器用于根据所述属性测试器变量,在项目向导中将所述功能模块所属的项目对应的项目创建窗口显示或隐藏。
25.作为第一方面的一种可能的实现方式,所述方法还包括:
26.生成用于加密和解密的第一私钥和第一公钥,以及,生成用于对所述第一公钥进行加密和解密的第二私钥和第二公钥;
27.对所述软件功能模块中包括的第一文件包进行解压处理,得到目标文件;
28.利用所述第一私钥对所述目标文件进行加密处理,并将加密后的目标文件压缩为第二文件包,并利用所述第二文件包替换所述第一文件包;
29.利用所述第二私钥对所述第一公钥进行加密,生成公钥文件,并将所述公钥文件存于指定位置。
30.作为第一方面的一种可能的实现方式,利用所述第二私钥对所述第一公钥进行加密,生成公钥文件,包括:
31.利用摘要算法生成所述第一公钥的第一信息摘要,并采用预设编码方式对所述第一信息摘要进行编码,得到第一编码信息;
32.利用第二私钥对所述第一公钥和所述第一编码信息进行加密,得到加密信息,并采用预设编码方式对所述加密信息进行编码,得到第二编码信息;
33.将所述第二编码信息混淆在随机生成的第一字符串中,得到第二字符串;
34.利用摘要算法生成所述第二字符串的第二信息摘要,并采用预设编码方式对所述第二信息摘要进行编码,得到第三字符串;
35.根据所述第二字符串和所述第三字符串生成所述公钥文件。
36.作为第一方面的一种可能的实现方式,所述摘要算法包括md5信息摘要算法;所述预设编码方式包括base64编码方式。
37.本技术第二方面提供了一种授权控制方法,利用上述第一方面的授权文件进行授权控制,包括:
38.响应来自用户的项目创建请求,获取根据授权范围生成的授权文件;
39.将所述授权文件进行解密处理;
40.根据解密后的所述授权文件,得到所述用户请求创建的项目所属的软件功能模块的授权许可信息;
41.调用授权控制插件,根据所述授权许可信息,在项目向导中将所述用户请求创建的项目显示或隐藏。
42.作为第二方面的一种可能的实现方式,响应来自用户的项目创建请求,获取根据授权范围生成的授权文件,包括:
43.响应来自用户的项目创建请求,运行所述用户请求创建的项目所属的功能模块;
44.调用授权许可查询接口,读取所述授权文件。
45.作为第二方面的一种可能的实现方式,将所述授权文件进行解密处理,得到解密后的授权文件,包括:
46.对所述授权文件中的所述授权许可信息和密文内容进行提取,得到第三散列码;将所述第三散列码和所述授权文件中的第二散列码进行比对,根据比对结果对所述授权文件进行验证;
47.将所述密文内容解除混淆,得到加密后的所述授权许可信息和加密后的公钥;
48.利用对称加密算法对所述公钥进行解密;
49.利用解密后的所述公钥对加密后的所述授权许可信息进行解密,得到解密信息;
50.将所述授权文件中的授权许可信息和所述解密信息进行比对,根据比对结果对所述授权文件进行验证。
51.作为第二方面的一种可能的实现方式,调用授权控制插件,根据所述授权许可信息,在项目向导中将所述用户请求创建的项目显示或隐藏,包括:
52.将所述授权许可信息赋值给活动元素的属性测试器变量,所述活动元素与所述用户请求创建的项目在项目向导中的项目创建窗口绑定;
53.根据所述属性测试器变量的值,将所述项目向导中的项目创建窗口显示或隐藏。
54.作为第二方面的一种可能的实现方式,上述方法还包括:
55.在运行加密后的软件功能模块的过程中,从动态链接库中获取第二公钥;
56.读取所述加密后的软件功能模块对应的公钥文件;
57.利用所述第二公钥对所述公钥文件进行解密,得到第一公钥;
58.利用所述第一公钥对所述加密后的软件功能模块中的第二文件包进行解密。
59.作为第二方面的一种可能的实现方式,利用所述第二公钥对所述公钥文件进行解密,得到第一公钥,包括:
60.根据所述公钥文件中的第二字符串生成第三信息摘要,将所述第三信息摘要与所述公钥文件中的第三字符串进行比对,根据比对结果对所述公钥文件进行验证;
61.将所述公钥文件中的第二字符串解除混淆,得到第三编码信息;
62.根据预设编码方式将所述第三编码信息进行解码;
63.利用所述第二公钥,对所述解码后的编码信息进行解密,得到所述第一公钥和所述第一公钥的第一信息摘要;
64.将所述第一公钥和所述第一信息摘要进行比对,根据比对结果对所述公钥文件进行验证。
65.作为第二方面的一种可能的实现方式,从动态链接库中获取第二公钥,包括:
66.利用本地接口程序加载所述动态链接库,所述动态链接库包括加壳处理后的动态链接库;
67.从所述加壳处理后的动态链接库中获取所述第二公钥。
68.本技术第三方面提供了一种软件功能模块的授权装置,包括:
69.生成单元,用于根据授权范围,生成对软件功能模块的授权许可信息;
70.加密单元,用于将所述授权许可信息进行加密处理,生成授权文件;以及
71.设置单元,用于设置授权控制插件,所述授权控制插件用于根据所述授权文件中的授权许可信息,在项目向导中将所述功能模块所属的项目显示或隐藏。
72.作为第三方面的一种可能的实现方式,所述加密单元包括:
73.第一提取子单元,用于利用摘要算法对所述授权许可信息进行提取,生成第一散列码;
74.第一生成子单元,用于根据所述授权许可信息和所述第一散列码,生成密文内容;
75.第二提取子单元,用于利用摘要算法对所述密文内容和所述授权许可信息进行提取,得到第二散列码;
76.第一生成子单元,用于根据所述授权许可信息、所述密文内容和所述第二散列码,生成所述授权文件。
77.作为第三方面的一种可能的实现方式,所述第一生成子单元用于:
78.利用非对称加密算法生成私钥和公钥;
79.利用所述私钥对所述授权许可信息进行加密;
80.利用对称加密算法对所述公钥进行加密;
81.将所述加密后的公钥、所述第一散列码和加密后的所述授权许可信息组合后进行分割,生成多组字符串;
82.利用混淆算法将所述多组字符串存入混淆码中,得到所述授权许可信息对应的密文内容。
83.作为第三方面的一种可能的实现方式,所述设置单元还用于:
84.在所述授权控制插件中设置授权许可查询接口,所述授权许可查询接口用于在所述功能模块被调用时读取所述授权文件。
85.作为第三方面的一种可能的实现方式,所述设置单元用于:
86.创建活动元素,所述活动元素中包括属性测试器,所述属性测试器中的属性测试器变量设置为软件功能模块的授权许可信息;
87.创建活动模式绑定元素,所述创建活动模式绑定元素用于将项目向导中的项目创建窗口绑定到所述活动元素;
88.对所述属性测试器进行功能扩展,扩展后的所述属性测试器用于根据所述属性测试器变量,在项目向导中将所述功能模块所属的项目对应的项目创建窗口显示或隐藏。
89.作为第三方面的一种可能的实现方式,上述装置还包括加密单元,所述加密单元包括:
90.生成子单元,用于:生成用于加密和解密的第一私钥和第一公钥,以及,生成用于对所述第一公钥进行加密和解密的第二私钥和第二公钥;
91.处理子单元,用于:对所述软件功能模块中包括的第一文件包进行解压处理,得到目标文件;
92.第一加密子单元,用于:利用所述第一私钥对所述目标文件进行加密处理,并将加密后的目标文件压缩为第二文件包,并利用所述第二文件包替换所述第一文件包;
93.第二加密子单元,用于:利用所述第二私钥对所述第一公钥进行加密,生成公钥文
件,并将所述公钥文件存于指定位置。
94.作为第三方面的一种可能的实现方式,所述第二加密子单元用于:
95.利用摘要算法生成所述第一公钥的第一信息摘要,并采用预设编码方式对所述第一信息摘要进行编码,得到第一编码信息;
96.利用第二私钥对所述第一公钥和所述第一编码信息进行加密,得到加密信息,并采用预设编码方式对所述加密信息进行编码,得到第二编码信息;
97.将所述第二编码信息混淆在随机生成的第一字符串中,得到第二字符串;
98.利用摘要算法生成所述第二字符串的第二信息摘要,并采用预设编码方式对所述第二信息摘要进行编码,得到第三字符串;
99.根据所述第二字符串和所述第三字符串生成所述公钥文件。
100.作为第三方面的一种可能的实现方式,所述摘要算法包括md5信息摘要算法;所述预设编码方式包括base64编码方式。
101.本技术第四方面提供了一种授权控制装置,利用上述第三方面的授权文件进行授权控制,包括:
102.获取单元,用于响应来自用户的项目创建请求,获取根据授权范围生成的授权文件;
103.解密单元,用于将所述授权文件进行解密处理;
104.处理单元,用于根据解密后的所述授权文件,得到所述用户请求创建的项目所属的软件功能模块的授权许可信息;
105.控制单元,用于调用授权控制插件,根据所述授权许可信息,在项目向导中将所述用户请求创建的项目显示或隐藏。
106.作为第四方面的一种可能的实现方式,所述获取单元用于:
107.响应来自用户的项目创建请求,运行所述用户请求创建的项目所属的功能模块;
108.调用授权许可查询接口,读取所述授权文件。
109.作为第四方面的一种可能的实现方式,所述解密单元用于:
110.对所述授权文件中的所述授权许可信息和密文内容进行提取,得到第三散列码;将所述第三散列码和所述授权文件中的第二散列码进行比对,根据比对结果对所述授权文件进行验证;
111.将所述密文内容解除混淆,得到加密后的所述授权许可信息和加密后的公钥;
112.利用对称加密算法对所述公钥进行解密;
113.利用解密后的所述公钥对加密后的所述授权许可信息进行解密,得到解密信息;
114.将所述授权文件中的授权许可信息和所述解密信息进行比对,根据比对结果对所述授权文件进行验证。
115.作为第四方面的一种可能的实现方式,所述控制单元用于:
116.将所述授权许可信息赋值给活动元素的属性测试器变量,所述活动元素与所述用户请求创建的项目在项目向导中的项目创建窗口绑定;
117.根据所述属性测试器变量的值,将所述项目向导中的项目创建窗口显示或隐藏。
118.作为第四方面的一种可能的实现方式,上述装置还包括解密单元,所述解密单元包括:
119.获取子单元,用于:在运行加密后的软件功能模块的过程中,从动态链接库中获取第二公钥;
120.读取子单元,用于:读取所述加密后的软件功能模块对应的公钥文件;
121.第一解密子单元,用于:利用所述第二公钥对所述公钥文件进行解密,得到第一公钥;
122.第二解密子单元,用于:利用所述第一公钥对所述加密后的软件功能模块中的第二文件包进行解密。
123.作为第四方面的一种可能的实现方式,所述第一解密子单元用于:
124.根据所述公钥文件中的第二字符串生成第三信息摘要,将所述第三信息摘要与所述公钥文件中的第三字符串进行比对,根据比对结果对所述公钥文件进行验证;
125.将所述公钥文件中的第二字符串解除混淆,得到第三编码信息;
126.根据预设编码方式将所述第三编码信息进行解码;
127.利用所述第二公钥,对所述解码后的编码信息进行解密,得到所述第一公钥和所述第一公钥的第一信息摘要;
128.将所述第一公钥和所述第一信息摘要进行比对,根据比对结果对所述公钥文件进行验证。
129.作为第四方面的一种可能的实现方式,所述获取单元用于:
130.利用本地接口程序加载所述动态链接库,所述动态链接库包括加壳处理后的动态链接库;
131.从所述加壳处理后的动态链接库中获取所述第二公钥。
132.本技术第五方面提供了一种计算设备,包括:
133.通信接口;
134.至少一个处理器,其与所述通信接口连接;以及
135.至少一个存储器,其与所述处理器连接并存储有程序指令,所述程序指令当被所述至少一个处理器执行时使得所述至少一个处理器执行上述第一方面任一所述的方法。
136.本技术第六方面提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令当被计算机执行时使得所述计算机执行上述第一方面任一所述的方法。
137.本发明的这些和其它方面在以下(多个)实施例的描述中会更加简明易懂。
附图说明
138.以下参照附图来进一步说明本发明的各个特征和各个特征之间的联系。附图均为示例性的,一些特征并不以实际比例示出,并且一些附图中可能省略了本技术所涉及领域的惯常的且对于本技术非必要的特征,或是额外示出了对于本技术非必要的特征,附图所示的各个特征的组合并不用以限制本技术。另外,在本说明书全文中,相同的附图标记所指代的内容也是相同的。具体的附图说明如下:
139.图1为本技术实施例提供的软件功能模块的授权方法的一实施例的示意图;
140.图2a和图2b为本技术实施例提供的软件功能模块的授权方法的一实施例的示意图;
141.图3为本技术实施例提供的软件功能模块的授权方法的一实施例的加密过程的示
意图;
142.图4为本技术实施例提供的软件功能模块的授权方法的一实施例的加密过程的示意图;
143.图5为本技术实施例提供的软件功能模块的授权方法的一实施例的加密过程的示意图;
144.图6为本技术实施例提供的软件功能模块的授权方法的一实施例的加密过程的示意图;
145.图7为本技术实施例提供的授权控制方法的一实施例的示意图;
146.图8为本技术实施例提供的授权控制方法的一实施例的示意图;
147.图9为本技术实施例提供的软件功能模块的授权方法和授权控制方法的一实施例的总体架构示意图;
148.图10为本技术实施例提供的授权控制方法的一实施例的示意图;
149.图11为本技术实施例提供的授权控制方法的一实施例的示意图;
150.图12为本技术实施例提供的授权控制方法的一实施例的示意图;
151.图13为本技术实施例提供的授权控制方法的一实施例的示意图;
152.图14为本技术实施例提供的软件功能模块的授权装置的一实施例的示意图;
153.图15为本技术实施例提供的授权控制装置的一实施例的示意图;
154.图16为本技术实施例提供的计算设备的示意图。
具体实施方式
155.说明书和权利要求书中的词语“第一、第二、第三等”或模块a、模块b、模块c等类似用语,仅用于区别类似的对象,不代表针对对象的特定排序,可以理解地,在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本技术实施例能够以除了在这里图示或描述的以外的顺序实施。
156.在以下的描述中,所涉及的表示步骤的标号,如s110、s120
……
等,并不表示一定会按此步骤执行,在允许的情况下可以互换前后步骤的顺序,或同时执行。
157.说明书和权利要求书中使用的术语“包括”不应解释为限制于其后列出的内容;它不排除其它的元件或步骤。因此,其应当诠释为指定所提到的所述特征、整体、步骤或部件的存在,但并不排除存在或添加一个或更多其它特征、整体、步骤或部件及其组群。因此,表述“包括装置a和b的设备”不应局限为仅由部件a和b组成的设备。
158.本说明书中提到的“一个实施例”或“实施例”意味着与该实施例结合描述的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在本说明书各处出现的用语“在一个实施例中”或“在实施例中”并不一定都指同一实施例,但可以指同一实施例。此外,在一个或多个实施例中,能够以任何适当的方式组合各特定特征、结构或特性,如从本公开对本领域的普通技术人员显而易见的那样。
159.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。如有不一致,以本说明书中所说明的含义或者根据本说明书中记载的内容得出的含义为准。另外,本文中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。为了准确地对本技术中的技术内容进行叙述,以及为了准确
地理解本发明,在对具体实施方式进行说明之前先对本说明书中所使用的术语给出如下的解释说明或定义:
160.1)md5信息摘要算法(md5 message-digest algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。md5信息摘要算法的原理可简要的叙述为:md5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
161.2)开放网格服务基础设施(open grid services infrastructure,ogsi):ogsi是一个开放并且提供统一接口标准的体系框架的服务网络。ogsi基于这个体系框架,服务提供商、程序开发人员、软件提供商、服务网管运营商,以及设备提供商能够协调地联合起来开发,部署以及管理向用户提供的各种服务。
162.3)eclipse:是一个开放源代码的、基于java的可扩展开发平台。就其本身而言,它是一个框架和一组服务,用于通过插件组件构建开发环境。eclipse附带了一个标准的插件集,包括java开发工具(java development kit,jdk)。
163.4)base64:是网络上最常见的用于传输8bit字节码的编码方式之一。base64是一种基于64个可打印字符来表示二进制数据的方法。base64编码是从二进制到字符的过程,可用于在超文本传输协议(hyper text transfer protocol,http)环境下传递较长的标识信息。采用base64编码具有不可读性,需要解码后才能阅读。
164.5)加壳:是利用特殊的算法,对可执行文件里的资源进行压缩。这个压缩之后的文件,可以独立运行。解压过程完全隐蔽,都在内存中完成。加壳后的可执行文件附加在原程序上通过加载器载入内存后,先于原始程序执行,得到控制权,执行过程中对原始程序进行解密、还原,还原完成后再把控制权交还给原始程序,执行原来的代码部分。加上外壳后,原始程序代码在磁盘文件中一般是以加密后的形式存在的,只在执行时在内存中还原,这样就可以比较有效地防止破解者对程序文件的非法修改,同时也可以防止程序被静态反编译。
165.6)svn(subversion):是一个开放源代码的版本控制系统。该系统通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式的管理。
166.下面先对现有的方法进行介绍,然后再对本技术的技术方案进行详细介绍。
167.现有技术:以eclipse开发平台为例,eclipse是一款基于ogsi模块规范、实现了插件机制的多语言开发环境和开发平台。由于eclipse是开源的平台,所以当需要保护基于eclipse平台开发的软件产品的知识产权时,难度较大。当前普遍所采取的一种授权手段是根据用户的购买需求对软件产品进行打包操作,仅将用户购买的功能模块打包到软件产品中。
168.现有技术具有以下缺陷:根据用户购买需求进行打包会导致工作繁杂、容易出错。并且一旦用户想要使用额外的功能则需要重新打包和重新安装,增加了额外的工作量且用户体验不佳。
169.基于上述现有技术所存在的技术问题,本技术提供了一种软件功能模块的授权方法和授权控制的方法。本技术实施例通过授权文件中对软件功能模块的授权许可信息,在
制作软件产品安装包时不必考虑用户所购买的软件产品功能,通过不同的授权文件许可内容,可以灵活控制用户所使用的软件产品功能。本技术实施例不必依赖打包这一操作环节进行授权控制,不必根据用户的购买需求对软件产品进行打包操作,从而避免发生打包导致的工作繁杂、容易出错的问题。另外,如果用户需要使用更多的功能,则导入新的授权文件替换已有的授权文件即可,不需要重新打包和重新安装,解决了现有技术中增加额外的工作量的问题,且提升了用户体验。
170.图1为本技术实施例提供的软件功能模块的授权方法的一实施例的示意图。如图1所示,该软件功能模块的授权方法可以包括:
171.步骤s110,根据授权范围,生成对软件功能模块的授权许可信息;
172.步骤s120,将所述授权许可信息进行加密处理,生成授权文件;以及
173.步骤s130,设置授权控制插件,所述授权控制插件用于根据所述授权文件中的授权许可信息,在项目向导中将所述功能模块所属的项目显示或隐藏。
174.软件功能模块可包括实现某个功能的一类项目。以eclipse开发平台为例,基于eclipse平台开发的软件产品可能包括若干个功能模块。在步骤s110中,可根据用户使用软件功能模块的需求,也就是根据用户的购买需求确定授权范围,根据授权范围生成对软件功能模块的授权许可信息。例如,软件产品中包括功能模块1、功能模块2、功能模块3、
……
、功能模块n,用户购买的功能模块是功能模块2和功能模块3。则授权许可信息可包括用户名称和对应的该用户被允许使用的功能模块名称。
175.在步骤s120中,对步骤s110中生成的授权许可信息进行加密处理,例如可使用非对称加密算法对信息进行加密处理,生成授权文件。经过加密处理可保证数据不被篡改,提高信息安全性。
176.在步骤s130中,可将授权机制做成授权控制插件,将授权控制插件添加到功能模块中。具体地,可利用授权控制插件,根据授权许可信息,在项目向导中将功能模块所属的项目显示或隐藏。例如该用户允许使用的功能模块包括功能模块2和功能模块3,则在项目向导中仅显示功能模块2和功能模块3所属的项目。该用户可以创建和使用功能模块2和功能模块3所属的项目。而对于其它不允许用户使用的功能模块的项目,则在项目向导中隐藏。对于在项目向导中隐藏的项目,该用户无法创建和使用。通过以上手段可以实现对软件功能模块的授权控制。
177.本技术实施例通过授权文件中对软件功能模块的授权许可信息,可以灵活控制用户所使用的软件产品功能。本技术实施例不必依赖打包这一操作环节进行授权控制,不必根据用户的购买需求对软件产品进行打包操作,在制作软件产品安装包时不必考虑用户所购买的软件产品功能。并且在用户需求变更时不必重新打包和安装软件产品,使得授权控制的操作更加便捷,提升了用户体验。
178.在一个示例中,可基于eclipse提供的插件扩展机制,实现对功能模块进行控制。扩展点是软件或者软件框架中专门设置的,可供其他开发人员进行功能扩展的点。eclipse针对项目向导,提供了隐藏或显示的扩展点“org.eclipse.ui.activities”。基于此扩展点,可对软件产品中提供的每个项目向导入口,实现一套控制项目向导显示或隐藏的授权控制插件。
179.在一种实施方式中,设置授权控制插件,包括:
180.创建活动元素,所述活动元素中包括属性测试器,所述属性测试器中的属性测试器变量设置为软件功能模块的授权许可信息;
181.创建活动模式绑定元素,所述创建活动模式绑定元素用于将项目向导中的项目创建窗口绑定到所述活动元素;
182.对所述属性测试器进行功能扩展,扩展后的所述属性测试器用于根据所述属性测试器变量,在项目向导中将所述功能模块所属的项目对应的项目创建窗口显示或隐藏。
183.在一个示例中,使用扩展点org.eclipse.ui.activities显示或隐藏新建项目向导的步骤具体可包括:
184.1)创建activity(活动)元素,在activity元素中使用propertytester(属性测试器)判断条件。
185.如果有多个功能模块需要进行授权管理,则需要对应定义多个activity。
186.具体地,属性测试器变量可以赋值为“isxxxmoduleenabled”。其中,“xxx”为对应功能模块或项目向导的名字。
187.2)创建activitypatternbinding(活动模式绑定)元素,绑定项目创建向导到activity元素。
188.如果有多个项目向导需要控制,则需要对应扩展相应数目的activitypatternbinding。
189.具体地,在activitypatternbinding中,pattern属性格式可以是:插件名/项目向导id。
190.3)扩展实现propertytester。
191.具体地,可在实现扩展方法的类中控制新建项目向导的显示和隐藏。例如可以在扩展方法中属性测试器变量的值可以赋值为“isxxxmoduleenabled”,可以根据属性测试器变量的值控制新建项目向导的显示和隐藏。其中,“isxxxmoduleenabled”中的“xxx”对应功能模块或项目向导的名字,需要和步骤1)中的名字对应。
192.以intewelldeveloper软件开发工具的授权控制为例,在intewelldeveloper产品中,采用本技术实施例控制用户所使用的功能,具体可包括如下流程:
193.1)根据用户的购买需求确定授权范围,根据授权范围生成授权文件;
194.2)用户将授权文件导入到intewelldeveloper中;
195.3)intewelldeveloper根据授权文件中的许可内容,决定显示或隐藏项目向导入口;
196.4)如果用户需要使用更多的功能,则导入新的授权文件替换已有的授权文件,重启intewelldeveloper即可。
197.图2a为本技术实施例提供的软件功能模块的授权方法的一实施例的示意图。如图2a所示,在一种实施方式中,图1中的步骤s120,将所述授权许可信息进行加密处理,生成授权文件,具体可包括:
198.步骤s210,利用摘要算法对所述授权许可信息进行提取,生成第一散列码;
199.步骤s220,根据所述授权许可信息和所述第一散列码,生成密文内容;
200.步骤s230,利用摘要算法对所述密文内容和所述授权许可信息进行提取,得到第二散列码;
201.步骤s240,根据所述授权许可信息、所述密文内容和所述第二散列码,生成所述授权文件。
202.图2b为本技术实施例提供的软件功能模块的授权方法的一实施例的示意图。如图2b所示,在一种实施方式中,图2a中的步骤s220,根据所述授权许可信息和所述第一散列码,生成密文内容,具体可包括:
203.步骤s221,利用非对称加密算法生成私钥和公钥;
204.步骤s222,利用所述私钥对所述授权许可信息进行加密;
205.步骤s223,利用对称加密算法对所述公钥进行加密;
206.步骤s224,将所述加密后的公钥、所述第一散列码和加密后的所述授权许可信息组合后进行分割,生成多组字符串;
207.步骤s225,利用混淆算法将所述多组字符串存入混淆码中,得到所述授权许可信息对应的密文内容。
208.其中,非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称加密算法。
209.上述加密处理过程中的摘要算法可包括md5信息摘要算法。
210.在一个示例中,授权文件由明文内容、密文内容、第二散列码三部分组成。其中的明文内容可包括授权许可信息。具体文件格式和制作方式如下:
211.a.明文内容包括:
212.1.用户名称。
213.2.用户编号。
214.3.授权类型:包括授权的周期或次数。
215.其中,次数是指按照次数进行授权。以intewell操作系统为例,用户在采购intewell操作系统时,在合同中规定了采购的intewell操作系统的套数。该套数可作为进行授权的次数。intwell操作系统的授权系统需要根据合同中规定的合法安装套数对灌装了的intewell操作系统进行授权。
216.周期是指按照日期进行授权。用户在采购intewell操作系统时,在合同中规定了在指定的日期范围内,用户可以无限次数地灌装intewell操作系统。授权管理系统需要根据合同中规定的日期范围,对用户灌装的intewell操作系统进行授权。
217.4.授权值:如果授权类型是按照周期进行授权,则记录授权的开始日期和结束日期;如果授权类型是按照次数进行授权,则记录授权的次数值。
218.5.功能模块名称。
219.6.功能模块编号。
220.可以对软件产品中的功能模块进行统一编号,方便后续授权查询。
221.7.授权文件生成日期和时间。
222.8.授权文件编号。
223.b.密文内容:包含若干行、每行1024个随机字符的混淆码。密文内容的制作方式如
下:
224.1.使用md5加盐方式,对明文内容进行处理,生成第一散列码。其中,“盐”是一个随机字符串。
225.2.使用非对称加密算法中的私钥对明文内容进行加密处理。其中,密钥长度不少于2048位。
226.3.将非对称加密算法中的公钥使用对称加密算法进行加密,然后将加密后的公钥与第一散列码、加密后的明文内容一起进行分割,生成多组字符串。
227.4.利用混淆算法将分割后的多组字符串内容存入混淆码中。
228.其中,混淆算法的处理步骤如下:
229.1.在密文内容的第一行的x位置、y位置、z位置,分别记录第一段分割内容所存放的行号、起始位置、长度;
230.2.在存放了第一段分割内容的后面n个字符后的a位置、b位置、c位置,分别记录第二段分割内容所存放的行号、起始位置、长度;
231.3.在存放了第二段分割内容的后面n个字符后的a位置、b位置、c位置,分别记录第三段分割内容所存放的行号、起始位置、长度;
232.4.以此类推,将所有的分割内容都存放完毕。
233.c.第二散列码
234.对密文内容和明文内容通过md5加盐方式提取第二散列码,并存放于授权文件的最后一行。
235.上述制作软件产品的授权文件的制作方式中,通过非对称加密技术、md5“加盐”散列码提取技术、对称加密技术,将授权文件的内容进行加密,然后通过混淆技术,将加密后的内容分段写入到一组混淆码中。该处理过程能够对授权文件进行加密和解密,能够有效防止授权文件被破解。
236.在又一个示例中,还可以采用非对称加密算法,在制作软件产品包时,对组成软件产品的功能模块的java类(class)文件进行加密,以提高信息安全性。
237.在一种实施方式中,上述方法还包括:
238.在所述授权控制插件中设置授权许可查询接口,所述授权许可查询接口用于在所述功能模块被调用时读取所述授权文件。
239.本技术实施例中,可将授权机制做成授权控制插件,并对外提供授权许可查询接口,将授权控制插件添加到功能模块中。功能模块也可以做成插件。一个功能模块可包括一个插件或者一组插件。在功能模块插件运行时调用授权控制插件的授权许可查询接口进行授权查询。
240.例如,可基于eclipse插件开发机制,实现一套授权许可查询接口。软件产品中的每个功能模块在被调用时,都需要通过授权许可查询接口查询该用户是否被允许使用该功能模块。
241.另外,还可以基于eclipse插件的依赖机制,将实现授权许可查询接口的插件添加到功能插件的依赖项中,确保该插件在被使用之前被加载和初始化。同理,还可以将授权控制插件添加到功能插件的依赖项中。
242.图3为本技术实施例提供的软件功能模块的授权方法的一实施例的加密过程的示
意图。如图3所示,在一种实施方式中,上述方法还包括对所述软件功能模块中包括的第一文件包进行加密处理,具体可包括:
243.步骤s520,生成用于加密和解密的第一私钥和第一公钥,以及,生成用于对所述第一公钥进行加密和解密的第二私钥和第二公钥;
244.步骤s530,对所述软件功能模块中包括的第一文件包进行解压处理,得到目标文件;
245.步骤s540,利用所述第一私钥对所述目标文件进行加密处理,并将加密后的目标文件压缩为第二文件包,并利用所述第二文件包替换所述第一文件包;
246.步骤s550,利用所述第二私钥对所述第一公钥进行加密,生成公钥文件,并将所述公钥文件存于指定位置。
247.本技术实施例中,可采用非对称加密算法对软件功能模块中包括的第一文件包进行加密。其中,文件包可包括开发环境中的软件包。软件包(software package)是指具有特定的功能,用来完成特定任务的一个程序或一组程序。例如,可以将java程序打包成jar文件。eclipse开发环境中的软件包通常以jar包的形式存在。
248.非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
249.图4为本技术实施例提供的软件功能模块的授权方法的一实施例的加密过程的示意图。参见图3和图4,在步骤s520中,可使用开放式安全套接层协议(open secure sockets layer,openssl)生成公私钥对。openssl软件包的功能部分包括密码算法库。利用openssl可实现非对称加密算法和信息摘要算法。
250.本技术实施例中,利用openssl生成的第一公私钥对可包括用于对文件包进行加密和解密的第一私钥和第一公钥。其中,第一公私钥对是一对临时生成的公私钥。利用openssl生成的第二公私钥对可包括用于对所述第一公钥进行加密和解密的第二私钥和第二公钥。其中,第二公私钥对也称为“根公私钥”,是一对保持不变的公私钥。第二公钥也称为“根公钥”;第二私钥也称为“根私钥”。
251.本技术实施例中,首先在步骤s530中,对软件功能模块中的第一文件包进行解压处理,得到目标文件。然后在步骤s540中,利用第一私钥对步骤s530中得到的目标文件进行加密处理。再将加密后的目标文件压缩为第二文件包,并在软件功能模块中将第一文件包替换为第二文件包。
252.参见图3和图4,在步骤s540中,通过第一私钥加密jar包的class文件。在这一步骤中,还可以在文件的起始几个字节设置魔数,表明该文件是加密后的文件。
253.大多数情况下,都是通过扩展名来识别一个文件的类型的。比如一个.txt类型的文件是一个纯文本文件。但是,扩展名是可以修改的,当一个文件的扩展名被修改过,识别一个文件的类型就用到了“魔数”。很多类型的文件中,其起始的几个字节的内容是固定的。有些情况下这个内容是有意填充,还有些情况下这个内容是本就如此的。因为根据这几个字节的内容就可以确定文件类型,这几个字节的内容也被称为魔数。有了这些魔术数字,就
可以很方便地区别不同的文件。
254.在步骤s550中,通过根第二私钥加密第一公钥,生成公钥文件。本技术实施例中,可在开发环境中生成指定的第一文件包的公钥文件。则在运行开发环境时对加密后的第一文件包进行解密,也就是对第二文件包进行解密,利用第二公钥和步骤s550中生成的公钥文件对第二文件包包进行解密。
255.本技术实施例采用非对称算法对软件包进行加密,与混淆代码的方式不同。因此在对软件包加密的过程中,只需要加密指定的软件包,不需要同时加密有依赖关系的软件包,并且使得解密后的程序文件与未进行加密之前的程序文件保持一致,从而可以保证软件开发环境和生产环境的一致性。另外,采用非对称加密的方式对软件包进行加密,不易被破解、反编译,提升了数据安全性。
256.图5为本技术实施例提供的软件功能模块的授权方法的一实施例的加密过程的示意图。参见图3至图5,图3示出了对软件功能模块中包括的第一文件包进行加密处理的方式,可利用类似的方式对软件开发环境进行加密处理。如图5所示,对软件开发环境进行加密处理,具体可包括:
257.步骤s610,获取开发环境;
258.步骤s620,生成用于加密和解密的第一私钥和第一公钥,以及,生成用于对所述第一公钥进行加密和解密的第二私钥和第二公钥;
259.步骤s630,对所述开发环境中的第一文件包进行解压处理,得到目标文件;
260.步骤s640,利用所述第一私钥对所述目标文件进行加密处理,并将加密后的目标文件压缩为第二文件包,并利用所述第二文件包替换所述第一文件包;
261.步骤s650,利用所述第二私钥对所述第一公钥进行加密,生成公钥文件,并将所述公钥文件存于所述开发环境的指定位置。
262.在开发环境中,对于软件的每一个版本,都对应有一个打包过程。在这个打包过程中会把需要加密的jar包进行加密。本技术实施例中,每一次打包过程都可以使用不同的公私钥,则不同版本之间的公私钥是不会通用的。
263.本技术实施例中,可对开发环境中指定的第一文件包进行加密处理。在步骤s610中,可从指定位置获取开发环境。在步骤s620至步骤s650中,可利用与图3所示的实施例类似的方式对软件开发环境进行加密处理,在此不再赘述。
264.图6为本技术实施例提供的软件功能模块的授权方法的一实施例的加密过程的示意图。如图6所示,
265.在一种实施方式中,利用所述第二私钥对所述第一公钥进行加密,生成公钥文件,包括:
266.步骤s710,利用摘要算法生成所述第一公钥的第一信息摘要,并采用预设编码方式对所述第一信息摘要进行编码,得到第一编码信息;
267.步骤s720,利用第二私钥对所述第一公钥和所述第一编码信息进行加密,得到加密信息,并采用预设编码方式对所述加密信息进行编码,得到第二编码信息;
268.步骤s730,将所述第二编码信息混淆在随机生成的第一字符串中,得到第二字符串;
269.步骤s740,利用摘要算法生成所述第二字符串的第二信息摘要,并采用预设编码
方式对所述第二信息摘要进行编码,得到第三字符串;
270.步骤s750,根据所述第二字符串和所述第三字符串生成所述公钥文件。
271.在一种实施方式中,所述摘要算法包括md5信息摘要算法;所述预设编码方式包括base64编码方式。
272.一个示例性的公钥文件生成过程可包括以下步骤:
273.1)获取第一公钥的16位md5摘要,将上述第一公钥的md5摘要称为第一信息摘要。采用base64编码方式对上述第一公钥的md5摘要进行编码,得到第一编码信息。
274.2)使用根私钥将第一公钥、第一编码信息加密,得到加密信息。采用base64编码方式对上述加密信息进行编码,得到的字符串称为第二编码信息。
275.3)生成100行、每行1024个字节的随机字符串,该随机字符串称为第一字符串。把步骤2)中生成的字符串通过自定义算法混淆在上述100行随机字符串中,得到第二字符串。例如,将步骤2)中生成的字符串拆分成100份子串,将该100份子串随机替换到100行随机字符串中。在第1行随机字符串中的固定位置替换第1份子串,在固定位置的后面替换为下一份字符串的偏移、长度。依次类推,一直替换到第100行字符串。替换后的结果是100行、每行1024个字节的字符串,即第二字符串。
276.4)生成第二字符串的md5摘要,将上述第二字符串的md5摘要称为第二信息摘要。采用base64编码方式对上述第二信息摘要进行编码,得到第三字符串。
277.5)将第二字符串作为公钥文件的前100行,将第三字符串作为公钥文件的第101行。将上述组合后的101行字符串存储到公钥文件中。
278.本技术实施例中,利用摘要算法、预设编码方式和自定义算法对第一公钥进行加密,得到公钥文件。使得在后续软件包或开发环境的运行的过程中,只有对公钥文件进行解密才能获得第一公钥,通过该方式进一步保障了软件包或开发环境的的数据安全性。
279.图7为本技术实施例提供的授权控制方法的一实施例的示意图。如图7所示,该授权控制方法利用上述软件功能模块的授权方法中的授权文件进行授权控制,具体可以包括:
280.步骤s310,响应来自用户的项目创建请求,获取根据授权范围生成的授权文件;
281.步骤s320,将所述授权文件进行解密处理;
282.步骤s330,根据解密后的所述授权文件,得到所述用户请求创建的项目所属的软件功能模块的授权许可信息;
283.步骤s340,调用授权控制插件,根据所述授权许可信息,在项目向导中将所述用户请求创建的项目显示或隐藏。
284.参见图1和图7,用户购买软件产品时可提供其使用软件产品功能模块的需求。例如,软件产品中包括功能模块1、功能模块2、功能模块3、
……
、功能模块n,用户需要使用的功能模块是功能模块2和功能模块3。则在图1的步骤s110和步骤s120中根据用户使用软件功能模块的需求确定授权范围,根据授权范围生成授权文件。授权文件的授权许可信息包括用户名称和对应的该用户允许使用的功能模块名称。
285.以eclipse开发平台为例,用户使用软件产品时首先要创建项目,提交项目创建请求。在步骤s310中,接收到来自用户的项目创建请求后,可获取步骤s120中生成的授权文件。在步骤s320中,将授权文件进行解密处理,得到解密后的授权文件。在步骤s330中,从解
密后的授权文件中得到述授权许可信息。述授权许可信息中包括该用户允许使用的功能模块名称。
286.在步骤s340中,调用步骤s130中设置的授权控制插件,利用该插件可根据授权许可信息,在项目向导中将用户请求创建的项目显示或隐藏。例如,该用户允许使用的功能模块包括功能模块2和功能模块3。如果接收到的用户创建请求的项目是功能模块2中的项目a,由于功能模块2在该用户的授权文件中是被允许使用的,则在项目向导中显示功能模块2中的项目a。该用户可以创建和使用功能模块2中的项目a。如果接收到的用户创建请求的项目是功能模块1中的项目b,由于功能模块1在该用户的授权文件中是不被允许使用的,则在项目向导中隐藏功能模块1中的项目b。对于在项目向导中隐藏的项目,该用户无法创建和使用。通过以上手段可以实现对软件功能模块的授权控制。
287.在一种实施方式中,图7中的步骤s310,响应来自用户的项目创建请求,获取根据授权范围生成的授权文件,包括:
288.响应来自用户的项目创建请求,运行所述用户请求创建的项目所属的功能模块;
289.调用授权许可查询接口,读取所述授权文件。
290.参见本技术实施例软件功能模块的授权方法的相关描述,在授权控制插件中设置授权许可查询接口,授权许可查询接口用于在所述功能模块被调用时读取所述授权文件。在功能模块插件运行时可调用授权控制插件的授权许可查询接口进行授权查询,读取授权文件。
291.图8为本技术实施例提供的授权控制方法的一实施例的示意图。如图8所示,在一种实施方式中,图7中的步骤s320,将所述授权文件进行解密处理,得到解密后的授权文件,具体可包括:
292.步骤s410,对所述授权文件中的所述授权许可信息和密文内容进行提取,得到第三散列码;将所述第三散列码和所述授权文件中的第二散列码进行比对,根据比对结果对所述授权文件进行验证;
293.步骤s420,将所述密文内容解除混淆,得到加密后的所述授权许可信息和加密后的公钥;
294.步骤s430,利用对称加密算法对所述公钥进行解密;
295.步骤s440,利用解密后的所述公钥对加密后的所述授权许可信息进行解密,得到解密信息;
296.步骤s450,将所述授权文件中的授权许可信息和所述解密信息进行比对,根据比对结果对所述授权文件进行验证。
297.参见图2和图8,一个示例性的对授权文件进行解密处理的解密算法的步骤如下:
298.1.读取授权文件的最后一行所存放的第二散列码。对授权文件的其它内容进行提取,得到第三散列码。比较第二散列码和第三散列码是否相同,如果以上两个散列码不同,则表示授权文件不合法。
299.2.从步骤s260中的混淆码中提取密文内容(即被加密后的明文内容)和用于解密密文内容的公钥。
300.3.使用对称加密算法对公钥进行解密。
301.4.使用公钥对密文内容进行解密,得到解密信息。
302.5.然后将解密信息和授权文件中的明文内容进行对比。如果两者不一致,则表示授权文件不合法。其中的明文内容可包括授权许可信息。
303.图9为本技术实施例提供的软件功能模块的授权方法和授权控制方法的一实施例的总体架构示意图。如图9所示,项目向导隐藏/显示控制模块用于利用授权控制插件,根据授权文件中的授权许可信息,在项目向导中将功能模块所属的项目显示或隐藏。授权文件解析模块用于对授权模块的内容进行解析。授权管理模块用于对用户的授权许可信息进行管理。
304.参见图9,还可基于java虚拟机加载java class文件的机制,对java虚拟机进行扩展,在内存中对java class进行解密,然后将解密结果提交给java虚拟机运行。
305.在上述示例中,可基于java虚拟机提供的调用动态库的java本地接口(java native interface,jni)机制,调用解密模块中的解密接口对授权文件在内存中进行解密。其中,jni是用java代码调用本地动态链接库(dynamic link library,dll)库(c/c 库)的技术。jni通过使用java本地接口书写程序,可以确保代码在不同的平台上方便移植。jni是为了本地已编译语言,例如c和c 而设计的。jni标准成为java平台的一部分,它允许java代码和其他语言写的代码进行交互。
306.在一种实施方式中,调用授权控制插件,根据所述授权许可信息,在项目向导中将所述用户请求创建的项目显示或隐藏,包括:
307.将所述授权许可信息赋值给活动元素的属性测试器变量,所述活动元素与所述用户请求创建的项目在项目向导中的项目创建窗口绑定;
308.根据所述属性测试器变量的值,将所述项目向导中的项目创建窗口显示或隐藏。
309.参见软件功能模块的授权方法中的描述,项目向导中的项目创建窗口已与对应的活动元素绑定,且活动元素的属性测试器变量可用于存储该项目所在的软件功能模块的授权许可信息。因此,将授权许可信息赋值给活动元素的属性测试器变量,根据属性测试器变量的值,利用活动元素中的属性测试器的扩展功能,可将项目向导中的项目创建窗口显示或隐藏。
310.图10为本技术实施例提供的授权控制方法的一实施例的示意图。如图10所示,在一种实施方式中,上述方法还包括对加密后的软件功能模块中的第二文件包进行解密,具体可包括:
311.步骤s810,在运行加密后的软件功能模块的过程中,从动态链接库中获取第二公钥;
312.步骤s820,读取所述加密后的软件功能模块对应的公钥文件;
313.步骤s830,利用所述第二公钥对所述公钥文件进行解密,得到第一公钥;
314.步骤s840,利用所述第一公钥对所述加密后的软件功能模块中的第二文件包进行解密。
315.本技术实施例中,在运行加密后的软件功能模块的过程中,可通过java本地接口(java native interface,jni)技术对软件包中的class文件进行解密。其中,jni是用java代码调用本地动态链接库(dynamic link library,dll)库(c/c 库)的技术。jni通过使用java本地接口书写程序,可以确保代码在不同的平台上方便移植。jni是为了本地已编译语言,例如c和c 而设计的。jni标准成为java平台的一部分,它允许java代码和其他语言写
的代码进行交互。
316.图11为本技术实施例提供的授权控制方法的一实施例的示意图。参见图10和图11,在步骤s810中,在开发环境启动时,可通过jni技术,加载dll库。从dll库中获取第二公钥,用于在软件包中的class文件加载到内存时,对class文件进行解密。
317.在步骤s820中,读取在加密过程中步骤s130生成的公钥文件。
318.在步骤s830中,通过第二公钥(也称根公钥)解密公钥文件,得到第一公钥。
319.在步骤s840中,在class文件加载到内存时,通过第一公钥解密第二文件包中的class文件。
320.在一种实施方式中,在class文件加载到内存时,可以通过魔数判断出该文件是加密文件,然后通过第一公钥解密该class文件。
321.图12为本技术实施例提供的授权控制方法的一实施例的示意图。参见图10至图12,图10示出了对加密后的软件功能模块中的第二文件包进行解密处理的方式,可利用类似的方式对软件开发环境进行解密处理。如图12所示,对软件开发环境进行解密处理,具体可包括:
322.步骤s910,在运行加密后的开发环境的过程中,从动态链接库中获取第二公钥;
323.步骤s920,读取所述加密后的开发环境对应的公钥文件;
324.步骤s930,利用所述第二公钥对所述公钥文件进行解密,得到第一公钥;
325.步骤s940,利用所述第一公钥对所述加密后的开发环境中的第二文件包进行解密。
326.在开发环境中可利用本技术实施例提供的方法对指定文件包进行加密,得到加密后的开发环境。本技术实施例中,在运行加密后的开发环境的过程中,可在步骤s910至步骤s940中,利用与图10所示的实施例类似的方式对软件开发环境进行解密处理,在此不再赘述。
327.本技术实施例中,在开发环境中可对指定文件包进行加密,在运行加密后的开发环境的过程中对文件包进行解密,使得解密后的程序文件与未进行加密之前的程序文件保持一致,从而可以保证软件开发环境和生产环境的一致性。
328.图13为本技术实施例提供的授权控制方法的一实施例的示意图。如图13所示,在一种实施方式中,利用所述第二公钥对所述公钥文件进行解密,得到第一公钥,包括:
329.步骤s1010,根据所述公钥文件中的第二字符串生成第三信息摘要,将所述第三信息摘要与所述公钥文件中的第三字符串进行比对,根据比对结果对所述公钥文件进行验证;
330.步骤s1020,将所述公钥文件中的第二字符串解除混淆,得到第三编码信息;
331.步骤s1030,根据预设编码方式将所述第三编码信息进行解码;
332.步骤s1040,利用所述第二公钥,对所述解码后的编码信息进行解密,得到所述第一公钥和所述第一公钥的第一信息摘要;
333.步骤s1050,将所述第一公钥和所述第一信息摘要进行比对,根据比对结果对所述公钥文件进行验证。
334.一个示例性的公钥文件解密过程可包括以下步骤:
335.1)获取公钥文件中的第二字符串,即获取公钥文件中的前100行字符串。根据公钥
文件中的前100行字符串生成md5摘要,该md5摘要称为第三信息摘要。将第三信息摘要与公钥文件中的第三字符串进行比对,即将第三信息摘要与公钥文件中的第101行进行比对,根据比对结果对公钥文件进行验证。如果比对结果是两者信息一致,则说明该公钥文件没有被篡改过。通过这种方式可保证所使用的公钥文件没被篡改过,保证软件包的数据安全性。
336.2)将公钥文件中的第二字符串按照自定义算法解除混淆,即将公钥文件中的前100行字符串按照自定义算法解除混淆,得到第三编码信息。
337.3)根据预设编码方式将步骤2)中得到的第三编码信息进行解码。
338.4)使用第二公钥,即使用根公钥对步骤3)中解码后的编码信息进行解密,得到第一公钥和第一公钥的第一信息摘要。
339.5)将步骤4)中得到的第一公钥和第一信息摘要进行比对,根据比对结果对公钥文件进行验证。如果比对结果是两者信息一致,则说明该公钥文件没有被篡改过。通过这种方式可以进一步保证所使用的公钥文件没被篡改过,保证软件包的数据安全性。
340.本发明实施例中,第一私钥和第二私钥是在加密开发环境的过程中使用,是可以设法保证不会被泄密的。在开发环境进行打包时,可使用一个专门用于打包的jar文件,里面存储有第一私钥和第二私钥。这个jar文件是可以单独运行的程序。通过运行这个jar文件执行jar包的加密过程。解密过程中不需要这个jar包,因此不会放到产品包中。
341.在一种实施方式中,从动态链接库中获取第二公钥,包括:
342.利用本地接口程序加载所述动态链接库,所述动态链接库包括加壳处理后的动态链接库;
343.从所述加壳处理后的动态链接库中获取所述第二公钥。
344.本发明实施例中,第一公钥是通过第二私钥加密,第二公钥解密。第二公钥是可以硬编码在dll库中,然后对dll库进行了加密。第二公钥是一段字符串,该字符串是在c 源码中的。c 源码编译生成dll库后,这段字符串可以在dll库搜索出来。对dll库加密加壳后,就无法搜索出第二公钥了。通过这种方式,使用dll库的加密技术对第二公钥进行保护。
345.在对加密后的软件包进行解密的过程中,可通过jni加载加壳处理后的dll库。可先从加壳处理后的dll库中获取第二公钥,用于对class文件进行解密。
346.在另一种实施方式中,解密流程中,解除混淆的自定义算法,也是存放在dll库中。
347.由于本技术实施例调用动态链接库对class文件进行解密,不需要使用javaagent技术和修改类加载器。解密过程不是通过java代码编写的,可以进行加密。通过对解密过程进行加密,进一步提升了数据安全性。
348.本技术实施中,可在开发环境将本技术实施例提供的开发环境的加密方法用于一套加密系统中。在一个示例中,开发环境的加密和解密流程如下:
349.一、启动加密系统。
350.1)从固定位置获取开发环境。其中,固定位置可包括本地、svn等。
351.2)调用openssl生成第一私钥、第一公钥、第二私钥和第二公钥,并保存到数据库中。
352.3)加密开发环境中的jar包。具体地,将jar包解压成文件夹,里面包含需要加密的class文件。迭代每个class文件,使用第一私钥对其进行加密,并添加魔数。将加密后的class文件压缩成jar包,用其替换原有的jar包。
353.4)使用第二私钥加密第一公钥,生成公钥文件。将公钥文件存放在开发环境下的指定位置,得到加密后的开发环境。
354.5)验证加密后的开发环境可以正常解密。
355.二、运行开发环境。
356.1)启动开发环境,加载dll库。
357.2)读取公钥文件,解密出第一公钥。
358.3)判断class文件是否是加密文件。使用第一公钥解密class文件,将class文件加载入内存使用。
359.4)开发环境正常运行。
360.综上,本技术实施例通过将eclipse平台的插件扩展技术、java calss文件加密和解密技术以及授权文件技术相结合的方式,实现对运行于eclipse平台之上的软件产品进行版权保护和功能模块许可控制,可以灵活控制用户所使用的软件产品功能,使得授权控制的操作更加便捷,提升了用户体验。
361.如图14所示,本技术还提供了相应的一种软件功能模块的授权装置的实施例,关于该装置的有益效果或解决的技术问题,可以参见与各装置分别对应的方法中的描述,或者参见发明内容中的描述,此处不再一一赘述。
362.在该软件功能模块的授权装置的实施例中,该装置包括:
363.生成单元610,用于根据授权范围,生成对软件功能模块的授权许可信息;
364.加密单元620,用于将所述授权许可信息进行加密处理,生成授权文件;以及
365.设置单元630,用于设置授权控制插件,所述授权控制插件用于根据所述授权文件中的授权许可信息,在项目向导中将所述功能模块所属的项目显示或隐藏。
366.在一种实施方式中,所述加密单元620包括:
367.第一提取子单元,用于利用摘要算法对所述授权许可信息进行提取,生成第一散列码;
368.第一生成子单元,用于根据所述授权许可信息和所述第一散列码,生成密文内容;第二提取子单元,用于利用摘要算法对所述密文内容和所述授权许可信息进行提取,得到第二散列码;
369.第一生成子单元,用于根据所述授权许可信息、所述密文内容和所述第二散列码,生成所述授权文件。
370.在一种实施方式中,所述第一生成子单元用于:
371.利用非对称加密算法生成私钥和公钥;
372.利用所述私钥对所述授权许可信息进行加密;
373.利用对称加密算法对所述公钥进行加密;
374.将所述加密后的公钥、所述第一散列码和加密后的所述授权许可信息组合后进行分割,生成多组字符串;
375.利用混淆算法将所述多组字符串存入混淆码中,得到所述授权许可信息对应的密文内容。
376.在一种实施方式中,所述设置单元630还用于:
377.在所述授权控制插件中设置授权许可查询接口,所述授权许可查询接口用于在所
述功能模块被调用时读取所述授权文件。
378.在一种实施方式中,所述设置单元630用于:
379.创建活动元素,所述活动元素中包括属性测试器,所述属性测试器中的属性测试器变量设置为软件功能模块的授权许可信息;
380.创建活动模式绑定元素,所述创建活动模式绑定元素用于将项目向导中的项目创建窗口绑定到所述活动元素;
381.对所述属性测试器进行功能扩展,扩展后的所述属性测试器用于根据所述属性测试器变量,在项目向导中将所述功能模块所属的项目对应的项目创建窗口显示或隐藏。
382.在一种实施方式中,上述装置还包括加密单元,所述加密单元包括:
383.生成子单元,用于:生成用于加密和解密的第一私钥和第一公钥,以及,生成用于对所述第一公钥进行加密和解密的第二私钥和第二公钥;
384.处理子单元,用于:对所述软件功能模块中包括的第一文件包进行解压处理,得到目标文件;
385.第一加密子单元,用于:利用所述第一私钥对所述目标文件进行加密处理,并将加密后的目标文件压缩为第二文件包,并利用所述第二文件包替换所述第一文件包;
386.第二加密子单元,用于:利用所述第二私钥对所述第一公钥进行加密,生成公钥文件,并将所述公钥文件存于指定位置。
387.在一种实施方式中,所述第二加密子单元用于:
388.利用摘要算法生成所述第一公钥的第一信息摘要,并采用预设编码方式对所述第一信息摘要进行编码,得到第一编码信息;
389.利用第二私钥对所述第一公钥和所述第一编码信息进行加密,得到加密信息,并采用预设编码方式对所述加密信息进行编码,得到第二编码信息;
390.将所述第二编码信息混淆在随机生成的第一字符串中,得到第二字符串;
391.利用摘要算法生成所述第二字符串的第二信息摘要,并采用预设编码方式对所述第二信息摘要进行编码,得到第三字符串;
392.根据所述第二字符串和所述第三字符串生成所述公钥文件。
393.在一种实施方式中,所述摘要算法包括md5信息摘要算法;所述预设编码方式包括base64编码方式。
394.如图15所示,本技术还提供了相应的一种授权控制装置的实施例,关于该装置的有益效果或解决的技术问题,可以参见与各装置分别对应的方法中的描述,或者参见发明内容中的描述,此处不再一一赘述。
395.在该授权控制装置的实施例中,该装置包括:
396.获取单元710,用于响应来自用户的项目创建请求,获取根据授权范围生成的授权文件;
397.解密单元720,用于将所述授权文件进行解密处理;
398.处理单元730,用于根据解密后的所述授权文件,得到所述用户请求创建的项目所属的软件功能模块的授权许可信息;
399.控制单元740,用于调用授权控制插件,根据所述授权许可信息,在项目向导中将所述用户请求创建的项目显示或隐藏。
400.在一种实施方式中,所述获取单元710用于:
401.响应来自用户的项目创建请求,运行所述用户请求创建的项目所属的功能模块;
402.调用授权许可查询接口,读取所述授权文件。
403.在一种实施方式中,所述解密单元720用于:
404.对所述授权文件中的所述授权许可信息和密文内容进行提取,得到第三散列码;将所述第三散列码和所述授权文件中的第二散列码进行比对,根据比对结果对所述授权文件进行验证;
405.将所述密文内容解除混淆,得到加密后的所述授权许可信息和加密后的公钥;
406.利用对称加密算法对所述公钥进行解密;
407.利用解密后的所述公钥对加密后的所述授权许可信息进行解密,得到解密信息;
408.将所述授权文件中的授权许可信息和所述解密信息进行比对,根据比对结果对所述授权文件进行验证。
409.在一种实施方式中,所述控制单元740用于:
410.将所述授权许可信息赋值给活动元素的属性测试器变量,所述活动元素与所述用户请求创建的项目在项目向导中的项目创建窗口绑定;
411.根据所述属性测试器变量的值,将所述项目向导中的项目创建窗口显示或隐藏。
412.作为第四方面的一种可能的实现方式,所述控制单元用于:
413.将所述授权许可信息赋值给活动元素的属性测试器变量,所述活动元素与所述用户请求创建的项目在项目向导中的项目创建窗口绑定;
414.根据所述属性测试器变量的值,将所述项目向导中的项目创建窗口显示或隐藏。
415.在一种实施方式中,上述装置还包括解密单元,所述解密单元包括:
416.获取子单元,用于:在运行加密后的软件功能模块的过程中,从动态链接库中获取第二公钥;
417.读取子单元,用于:读取所述加密后的软件功能模块对应的公钥文件;
418.第一解密子单元,用于:利用所述第二公钥对所述公钥文件进行解密,得到第一公钥;
419.第二解密子单元,用于:利用所述第一公钥对所述加密后的软件功能模块中的第二文件包进行解密。
420.在一种实施方式中,所述第一解密子单元用于:
421.根据所述公钥文件中的第二字符串生成第三信息摘要,将所述第三信息摘要与所述公钥文件中的第三字符串进行比对,根据比对结果对所述公钥文件进行验证;
422.将所述公钥文件中的第二字符串解除混淆,得到第三编码信息;
423.根据预设编码方式将所述第三编码信息进行解码;
424.利用所述第二公钥,对所述解码后的编码信息进行解密,得到所述第一公钥和所述第一公钥的第一信息摘要;
425.将所述第一公钥和所述第一信息摘要进行比对,根据比对结果对所述公钥文件进行验证。
426.在一种实施方式中,所述获取单元用于:
427.利用本地接口程序加载所述动态链接库,所述动态链接库包括加壳处理后的动态
链接库;
428.从所述加壳处理后的动态链接库中获取所述第二公钥。
429.图16是本技术实施例提供的一种计算设备900的结构性示意性图。该计算设备900包括:处理器910、存储器920、通信接口930。
430.应理解,图16中所示的计算设备900中的通信接口930可以用于与其他设备之间进行通信。
431.其中,该处理器910可以与存储器920连接。该存储器920可以用于存储该程序代码和数据。因此,该存储器920可以是处理器910内部的存储单元,也可以是与处理器910独立的外部存储单元,还可以是包括处理器910内部的存储单元和与处理器910独立的外部存储单元的部件。
432.可选的,计算设备900还可以包括总线。其中,存储器920、通信接口930可以通过总线与处理器910连接。总线可以是外设部件互连标准(peripheral component interconnect,pci)总线或扩展工业标准结构(extended industry standard architecture,eisa)总线等。所述总线可以分为地址总线、数据总线、控制总线等。
433.应理解,在本技术实施例中,该处理器910可以采用中央处理单元(central processing unit,cpu)。该处理器还可以是其它通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门矩阵(field programmable gate array,fpga)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。或者该处理器910采用一个或多个集成电路,用于执行相关程序,以实现本技术实施例所提供的技术方案。
434.该存储器920可以包括只读存储器和随机存取存储器,并向处理器910提供指令和数据。处理器910的一部分还可以包括非易失性随机存取存储器。例如,处理器910还可以存储设备类型的信息。
435.在计算设备900运行时,所述处理器910执行所述存储器920中的计算机执行指令执行上述方法的操作步骤。
436.应理解,根据本技术实施例的计算设备900可以对应于执行根据本技术各实施例的方法中的相应主体,并且计算设备900中的各个模块的上述和其它操作和/或功能分别为了实现本实施例各方法的相应流程,为了简洁,在此不再赘述。
437.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
438.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
439.在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件
可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
440.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
441.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
442.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。
443.本技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行一种多样化问题生成方法,该方法包括上述各个实施例所描述的方案中的至少之一。
444.本技术实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
445.计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
446.计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括、但不限于无线、电线、光缆、rf等等,或者上述的任意合适的组合。
447.可以以一种或多种程序设计语言或其组合来编写用于执行本技术操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c ,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部
分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(lan)或广域网(wan),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
448.注意,上述仅为本技术的较佳实施例及所运用的技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本技术进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明的构思的情况下,还可以包括更多其他等效实施例,均属于本发明的保护范畴。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献