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

一种软件授权双向加密系统及加密方法与流程

2022-04-06 18:45:36 来源:中国专利 TAG:


1.本发明涉及虚拟机容器云技术领域,特别涉及一种软件授权双向加密系统及加密方法。


背景技术:

2.当前环境下,互联网公司一般对外提供服务,而非直接出售软件。所以拥有很多核心的方法及技术专利的软件,对外发布时,需要保护好应用程序。一般要求不能让未被授权的第三方平台使用程序。当下常见的软件保护方案是基于云的方案。其将软件和运行在云端的服务做关联,通过连接一个云服务端验证软件许可,软件用户只需要输入授权码(由数字和字母组成的一串字符),激活授权码后即可使用软件,不需要任何账号信息。授权码支持绑定(在线、离线)、刷新(在线),查询许可信息和使用许可等基本功能。授权码既能提供高安全性加密,防止软件的盗版及逆向工程,也能配合实现软件的限时/限模块/绑定设备等销售模式。
3.docker 是一个用于开发、交付和运行应用程序的开放平台,是一种可移植开源的应用容器引擎,可以打包软件应用以及依赖包到一个可移植的镜像中,发布到任何流行的 linux或windows 机器上,是当前运行软件项目常用的使用方案。kubernetes是一个开源的,用于管理云平台中多个主机上容器化docker的应用,kubernetes的目标是让部署容器化的应用简单并且高效(powerful),kubernetes提供了应用部署,规划,更新,维护的一种机制。
4.而传统授权管理(license)方案,是将授权码固化到项目应用系统中,与硬件环境绑定(如机器码、mac地址等),具有唯一性、不可重复使用性。如要重新授权的时候,授权方将生成一个新的授权码发送给使用方替换掉原来的授权(license)文件即可。但kubernetes接管的docker容器,会自动按需删除、创建节点(pod),一旦删除节点容器,项目应用系统中的license将丢失,此时就需要人工介入重新授权license,将会导致授权时间内服务应用程序不可用,产生很大损失。


技术实现要素:

5.发明目的:为了克服现有技术中存在的不足,本发明提供一种软件授权双向加密方法,通过kubernetes内网验证服务客户端,自主控制、分配节点(pod)中项目程序的授权码(license)验证,让kubernetes对服务自动新建、删除节点(pod)并重建的这种多发、随机的场景得到很好的解决。而不像普通一对一的授权码(license)需要人工分发、授权、限量等影响业务运行,提升了项目使用过程中的流畅度,也使得节点(pod)使用受到控制。
6.为实现上述目的,本发明采用的技术方案为:一种软件授权双向加密系统,包括线上授权码创建与验证服务器、内网验证服务器、节点,所述线上授权码创建与验证服务器与内网验证服务器连接,所述内网验证服务器与节点连接,其中:所述线上授权码创建与验证服务器用于创建项目专属授权码,并将该授权码输入
至内网验证服务器,并对内网验证服务器加密完成后的授权码进行判断验证,确认其加密后的授权码是否有效。
7.所述内网验证服务器将授权码进行注册,且将注册后的授权码与自身机器信息联合加密,并将加密后的授权码提交给线上授权码创建与验证服务器,接受节点申请授权码的操作,并通过内网ip向节点发送授权码。
8.所述节点收集自身的系统机器信息,进行加密后向内网验证服务器进行申请授权码,在内网验证服务器下发授权码后,节点对该授权码进行比对。
9.所述内网验证服务器将注册后的授权码与自身机器信息联合加密的方法为:key =md5(mip iip sk1)其中,key表示联合加密后的密钥,md5表示md5加密方法,mip表示机器mac地址,iip表示网络ip地址,sk1表示隐私密钥,将接收的需要加密的字符串,包括机器mac地址信息、网络ip地址信息、隐私密钥信息进行md5加密,接收实现加密的算法资源将加密算法进行实例化,随后创建加密数据,最后将加密算法的结果转换为字符串并生成。
10.另一方面,本发明提供一种基于软件授权双向加密系统的加密方法,包括以下步骤:步骤1,官方在线上创建项目专属授权码,并将授权码输入至内网验证服务器;步骤2:在项目内部使用稳定、通互联网的服务器运行内网验证服务客户端,将授权码在内网验证服务客户端中进行注册,本验证服务客户端将注册后的授权码与自身机器信息联合加密,自身机器信息包括内网ip地址、mac地址,进行加密的方法具体为:key =md5(mip iip sk1)其中,key表示联合加密后的密钥,md5表示md5加密方法,mip表示机器mac地址,iip表示网络ip地址,sk1表示隐私密钥,将接收的需要加密的字符串,包括机器mac地址信息、网络ip地址信息、隐私密钥信息进行md5加密,接收实现加密的算法资源将加密算法进行实例化,随后创建加密数据,最后将加密算法的结果转换为字符串并生成,待对自身机器信息进行加密完成后一并提交给线上验证服务器;步骤3:线上验证服务器对加密完成后的授权码进行判断,确认该授权码是否合法有效;步骤4:在项目启动、或核心功能使用前,收集自身节点的系统机器信息,进行加密,加密后向内网验证服务客户端申请授权码使用;步骤5:内网验证服务客户端接受申请后,将通过内网ip向节点发送授权码,节点比对无误后允许节点的程序项目使用;作为本发明的一种优选实施方式,步骤1中创建的授权码具有唯一性。
11.作为本发明的一种优选实施方式,步骤2中自身机器信息还包括机器id、授权时间、系统版本号。
12.作为本发明的一种优选实施方式,步骤2中的内网验证服务客户端对节点进行注册,并分发授权码进行验证。
13.作为本发明的一种优选实施方式,步骤4中对自身节点的系统机器信息进行加密
的方法与步骤2中的加密方法一致。
14.作为本发明的一种优选实施方式,步骤4中通过库伯内茨应用kubernetes按需对服务自动新建、删除节点并重建,通过环境变量将步骤2中内网验证服务客户端的ip地址带入系统。
15.作为本发明的一种优选实施方式,步骤5中对节点发送的授权码是带有有效期的,且节点需要定时向步骤2的内网验证服务客户端发送心跳数据。
16.本发明相比现有技术,具有以下有益效果:本发明通过kubernetes内网验证服务器客户端,自主控制、分配节点(pod)中项目程序的授权码(license)验证,让kubernetes对服务自动新建、删除节点(pod)并重建的这种多发、随机的场景得到很好的解决。而不像普通一对一的授权码(license)需要人工分发、授权、限量等影响业务运行,提升了项目使用过程中的流畅度,也使得节点(pod)的使用受到控制。
附图说明
17.图1为该软件授权双向加密方法的流程图。
18.其中,s1为步骤1、s2为步骤2、s3为步骤3、s4为步骤4、s5为步骤5。
具体实施方式
19.下面结合附图和具体实施例,进一步阐明本发明,应理解这些实例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本技术所附权利要求所限定的范围。
20.一方面,本发明提供一种软件授权双向加密系统,包括线上授权码创建与验证服务器、内网验证服务器、节点,所述线上授权码创建与验证服务器与内网验证服务器连接,所述内网验证服务器与节点连接,其中:所述线上授权码创建与验证服务器用于创建项目专属授权码,并将该授权码输入至内网验证服务器,并对内网验证服务器加密完成后的授权码进行判断验证,确认其加密后的授权码是否有效。
21.所述内网验证服务器将授权码进行注册,且将注册后的授权码与自身机器信息联合加密,并将加密后的授权码提交给线上授权码创建与验证服务器,接受节点申请授权码的操作,并通过内网ip向节点发送授权码。
22.所述节点收集自身的系统机器信息,进行加密后向内网验证服务器进行申请授权码,在内网验证服务器下发授权码后,节点对该授权码进行比对。
23.所述内网验证服务器将注册后的授权码与自身机器信息联合加密的方法为:var secretprivatekey = "privatekey"// 创建秘钥func createkey() string {
ꢀꢀꢀꢀꢀꢀꢀ
return createmd5(localmacipaddr() localintranetip() secretprivatekey)}// md5加密
func createmd5(content string) string {
ꢀꢀꢀꢀꢀꢀꢀ
md5rs := md5.new()
ꢀꢀꢀꢀꢀꢀꢀ
md5rs.write([]byte(content))
ꢀꢀꢀꢀꢀꢀꢀ
return hex.encodetostring(md5rs.sum(nil))}其中,var 表示自定义变量,func表示语言关键字,表示声明一个方法,createkey()表示为此方法的名称,string表示返回类型为字符串,return表示返回值,createmd5()表示调用名为createmd5的方法,localmacipaddr()表示调用名为localmacipaddr的方法,localintranetip()表示调用名为localmacipaddr的方法,secretprivatekey表示隐私密钥,contentstring表示接收需要加密的字符串,md5rs表示接收实现加密的算法资源,md5.new()表示实例化加密算法,md5rs.write表示创建加密数据,[]byte(content)表示传入需加密的字符串,hex.encodetostring表示将加密算法结果转换为字符串,md5rs.sum(nil)表示生成md5加密算法结果。
[0024]
另一方面,本发明提供一种基于软件授权双向加密系统的加密方法,包括以下步骤:步骤1,官方线上创建,包含项目介绍、有效期等信息的项目专属授权码(license),且此授权码(license)具有唯一性;步骤2:在项目内部使用稳定、通互联网的服务器,并运行内网验证服务客户端,内网验证服务客户端具有注册与分发的功能;通过内网验证服务客户端将授权码(license)进行注册,本验证服务客户端将与自身机器信息联合加密,其中进行加密的方法具体为:var secretprivatekey = "privatekey"// 创建秘钥func createkey() string {
ꢀꢀꢀꢀꢀꢀꢀ
return createmd5(localmacipaddr() localintranetip() secretprivatekey)}// md5加密func createmd5(content string) string {
ꢀꢀꢀꢀꢀꢀꢀ
md5rs := md5.new()
ꢀꢀꢀꢀꢀꢀꢀ
md5rs.write([]byte(content))
ꢀꢀꢀꢀꢀꢀꢀ
return hex.encodetostring(md5rs.sum(nil))}其中,var 表示自定义变量,func表示语言关键字,表示声明一个方法,createkey()表示为此方法的名称,string表示返回类型为字符串,return表示返回值,createmd5()表示调用名为createmd5的方法,localmacipaddr()表示调用名为localmacipaddr的方法,localintranetip()表示调用名为localmacipaddr的方法,secretprivatekey表示隐私密钥,contentstring表示接收需要加密的字符串,md5rs表示接收实现加密的算法资源,md5.new()表示实例化加密算法,md5rs.write表示创建加密数据,[]byte(content)表示传入需加密的字符串,hex.encodetostring表示将加密算法结果转换为字符串,md5rs.sum
(nil)表示生成md5加密算法结果。
[0025]
自身机器信息包括内网ip、mac地址、机器id、授权时间、系统版本号等,待对自身机器信息进行加密完成后一并提交给步骤1中的线上验证服务器;其中,对mac地址进行的加密方法为:// 机器mac地址func localmacipaddr() string {
ꢀꢀꢀꢀꢀꢀꢀ
netrs, errrs := net.interfaces()
ꢀꢀꢀꢀꢀꢀꢀ
if errrs == nil {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
localip := localintranetip()
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
for _, inter := range netrs {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
addrrs, addrerr := inter.addrs()
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if addrerr == nil {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
for _, v := range addrrs {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if localip != "" && strings.contains(v.string(), localip) {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
return inter.hardwareaddr.string()
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀ
return "error-mac"}其中,func表示语言关键字,表示声明一个方法,localmacipaddr()表示为此方法的名称,string表示返回类型为字符串,netrs表示接收系统的网络资源,errrs表示接收系统的网络资源的错误,net.interfaces()表示系统的网络接口列表资源,nil{表示是否返回错误,for_,inter:表示提取系统网络资源数据,range表示语言关键字,遍历数据,addrrs表示接收内网回环网络资源,addrerr表示接收内网回环网络资源的错误,inter.addrs()表示内网回环网络资源,for_,v:表示提取内网回环网络资源数据,localip!表示获取的内网回环网络地址,&&strings表示语言关键字,表示字符串处理,contains表示语言关键字,表示判断字符串中是否包含指定字符,v.string()表示内网回环网络资源数据,inter.hardwareaddr.string()表示内网回环网络网卡地址,加密完成后,提交给步骤1中的线上验证服务器。
[0026]
对ip地址进行的加密方法为:// ip地址func localintranetip() string {
ꢀꢀꢀꢀꢀꢀꢀ
addrs, addrerr := net.interfaceaddrs()
ꢀꢀꢀꢀꢀꢀꢀ
if addrerr == nil {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
for _, address := range addrs {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if ipnet, ok := address.(*net.ipnet); ok && !ipnet.ip.isloopback() {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
if ipnet.ip.to4() != nil {
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
return ipnet.ip.string()
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀ
}
ꢀꢀꢀꢀꢀꢀꢀ
return ""}其中,func表示语言关键字,表示声明一个方法,localintranetip()表示为此方法的名称,string表示返回类型为字符串,addrs表示接收系统的网络资源,addrerr表示接收系统的网络资源的错误,net.interfaceaddrs()表示系统的网络接口列表资源,nil{表示语言关键字,是否返回错误,for_,address:表示提取系统网络资源数据,rangeaddrs表示语言关键字,遍历数据,ipnet表示接收系统的网络地址信息,*net.ipnet表示网络地址信息格式,ok&&!ipnet.ip.isloopback()表示正确获取内网网络回环地址信息,ipnet.to4()!表示内网网络回环ipv4地址存在,ipnet.ip.string表示将内网网络回环地址转为字符串,加密完成后,提交给步骤1中的线上验证服务器。
[0027]
步骤3:内网验证服务客户端将步骤2中创建的加密信息发送至线上验证服务器,线上验证服务器判断此授权码(license)是否合法有效,如果合法有效,将允许该授权码(license)运行;步骤4:当库伯内茨应用kubernetes按需对服务自动新建、删除节点(pod)并重建时,会通过环境变量将步骤2中内网验证服务客户端的ip地址带入系统,在项目启动、或核心功能使用前,收集自身节点(pod)的系统机器信息,进行加密,加密后向内网验证服务客户端申请授权码(license)使用;其中对自身节点(pod)的系统机器信息进行加密的方法与步骤2中的加密方法一致。
[0028]
步骤5:内网验证服务客户端接受申请后,为了安全使用行为,将通过内网ip向节点(pod)发送一个可用带有效期的授权码(license),节点(pod)比对无误后允许程序项目使用。由此可以避免kubernetes对服务自动新建、删除节点(pod)并重建的行为中,对节点容器的删除会导致授权码(license)的丢失,从而需要人工介入重新授权,将会导致授权时间内服务应用程序不可用,产生很大损失的问题。
[0029]
步骤6:为了防止节点(pod)无限克隆使用,需要定时向s2内网验证服务客户端发送心跳数据,在一定时间内,节点(pod)在线数量超过一般常规值,则警告需要联网进行人工审核。
[0030]
其中,心跳数据就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,故称为心跳数据。
[0031]
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应
视为本发明的保护范围。
再多了解一些

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

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

相关文献