加密基于Python的风光预测算法文件的方法及装置与流程

文档序号:20702656发布日期:2020-05-12 15:56阅读:170来源:国知局
加密基于Python的风光预测算法文件的方法及装置与流程

本发明涉及计算机技术领域,更具体地,涉及一种加密基于python的风光预测算法文件的方法及装置。



背景技术:

在风电/光伏功率预测领域,基于python语言开发预测算法,生成风光预测算法文件越来越广泛。风光预测算法文件存储有基于python语言的脚本,脚本用于实现风/光功率预测算法。由于python语言具有易用性和脚本化执行等特点,不能通过传统手段有效的保护风光预测算法文件。由于python脚本的明文可见性很容易造成代码泄露,甚至被恶意篡改而导致安全事故,带来巨大危害和经济损失。

现有针对python脚本进行的加密方法主要包括三种。第一种是代码混淆方法,在各种脚本语言中最常用的手段,主要方法是将代码中所使用的函数名、类名、变量名转换成无意义的长名,在逻辑中随机插入无效代码。通过这种方式降低代码可读性,但实际上代码明文还是暴露在外的,逆混淆只是时间问题,依然不能防止被拷贝、篡改。第二种是生成可执行文件方法,利用pyinstaller或py2exe工具将源码打包成二进制可执行文件来达到代码不可见的目的,但随着这两种工具的发布同时也出现了针对这两种工具的逆向工具,可以很轻松的对生成的二进制文件逆向工程获取源码。并且,打包后的二进制可执行文件在运行时会在系统缓存目录生成.pyc,通过对此文件的反编译也可以获取源码。第三种是定制python解释器方法,通过修改和重新编译python解释器,使其只能执行加密后的python脚本文件。这种方法必须重新部署一个自定制的python环境,但在很多时候电力系统生产安全规范中不允许修改服务器的操作系统环境,通知加密后的脚本还是以明文方式存在,虽然不可读但还是可以修改导致无法正常运行。

综上,现有针对基于python的风光预测算法文件进行加密的方法都存在安全性较差的不足。



技术实现要素:

本发明实施例提供一种加密基于python的风光预测算法文件的方法及装置,用以解决或者至少部分地解决现有技术存在的安全性较差的缺陷。

第一方面,本发明实施例提供一种加密基于python的风光预测算法文件的方法,包括:

将预先生成的密码校验代码植入所述风光预测算法文件中,以使得所述密码校验代码在用于实现风光预测算法的代码之前执行;

将植入所述密码校验代码的所述风光预测算法文件编译为二进制动态库;

其中,所述密码校验代码,用于对执行所述风光预测算法文件的设备进行校验。

优选地,所述将预先生成的密码校验代码植入所述风光预测算法文件中之前,还包括:

根据预设的单向加密算法和合法设备的硬件信息,生成初始校验信息。

优选地,所述根据预设的单向加密算法和合法设备的硬件信息,生成初始校验信息,与所述将预先生成的密码校验代码植入所述风光预测算法文件中之间,还包括:

根据所述单向加密算法,生成所述密码校验代码。

优选地,所述将植入所述密码校验代码的所述风光预测算法文件编译为二进制动态库之后,还包括:

将所述二进制动态库和存储所述初始校验信息的文件进行打包。

优选地,所述硬件信息包括:

中央处理器的标识、主板的标识、硬盘的标识和网卡的mac地址中的至少一种。

优选地,所述单向加密算法为pbkdf2算法。

优选地,所述风光预测算法文件为一个或多个。

第二方面,本发明实施例提供一种加密基于python的风光预测算法文件的装置,包括:

代码植入模块,用于将预先生成的密码校验代码植入所述风光预测算法文件中,以使得所述密码校验代码在用于实现风光预测算法的代码之前执行;

文件编译模块,用于将植入所述密码校验代码的所述风光预测算法文件编译为二进制动态库;

其中,所述密码校验代码,用于对执行所述风光预测算法文件的设备进行校验。

第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,执行所述程序时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的加密基于python的风光预测算法文件的方法的步骤。

第四方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面的各种可能的实现方式中任一种可能的实现方式所提供的加密基于python的风光预测算法文件的方法的步骤。

本发明实施例提供的加密基于python的风光预测算法文件的方法及装置,通过将预先生成的密码校验代码植入风光预测算法文件中,对执行风光预测算法文件的设备进行校验,将植入密码校验代码的风光预测算法文件编译为二进制动态库,能防止基于python的风光预测算法文件被篡改、被逆向和被非法拷贝,能更有效地保护代码安全性,能提高风光预测算法文件的安全性,能提高电网系统的运行安全性。并且,不需要修改服务中python解释器等运行环境,采用更轻量级的只针对算法文件进行加密的方法,更加简单、方便,能提高加密的效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为根据本发明实施例提供的加密基于python的风光预测算法文件的方法的流程示意图;

图2为根据本发明实施例提供的加密基于python的风光预测算法文件的装置的结构示意图;

图3为根据本发明实施例提供的电子设备的实体结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了克服现有技术的上述问题,本发明实施例提供一种加密基于python的风光预测算法文件的方法及装置,其发明构思是,将执行风光预测算法文件的设备的校验信息、单向加密算法、代码植入和编译成二进制动态库等多种技术结合使用,再由python脚本自动化完成加密工作,形成一套完整的自动化加密方案,不用修改服务中python解释器等运行环境,采用更轻量级的做法只针对算法文件进行加密,能防止基于python的风光预测算法文件被篡改、被逆向和被非法拷贝,从而能提高安全性。

图1为根据本发明实施例提供的加密基于python的风光预测算法文件的方法的流程示意图。如图1所示,该方法包括:步骤s101、将预先生成的密码校验代码植入风光预测算法文件中,以使得密码校验代码在用于实现风光预测算法的代码之前执行。

其中,密码校验代码,用于对执行风光预测算法文件的设备进行校验。

具体地,在待加密的风光预测算法文件中被加密算法(风光预测算法)的主入口函数中插入一段预先生成的密码校验代码。

该密码校验代码,可以为python脚本。该密码校验代码提供一个可被调用的函数。

风光预测算法,指对风电功率或光伏功率进行预测的算法。

某一设备执行风光预测算法文件时,执行到用于实现风光预测算法的代码,先执行密码校验代码,调用上述可被调用的函数生成该设备的临时验证信息,并根据该设备的验证信息对该设备进行校验,验证该设备是否为合法设备。

若校验成功,说明该设备为合法设备,则可以继续执行用于实现风光预测算法的代码,实现对风电功率或光伏功率进行预测。

若校验失败,说明该设备为非法设备,则用于实现风光预测算法的代码无法正常运行,不能进行对风电功率或光伏功率的预测。

密码校验代码的植入点可通过人工手动选择函数名或自动识别用于实现风光预测算法的代码中的main函数实现。

执行风光预测算法文件的设备,一般为服务器。

步骤s102、将植入密码校验代码的风光预测算法文件编译为二进制动态库。

具体地,通过python的超集cython可将*.py扩展名的脚本文件(即植入密码校验后的风光预测算法文件)编译成二进制动态库来执行,编译后的.so文件使用起来与.py文件无差异。由于二进制的不可见性,有效地防止了代码泄露与恶意篡改。

本发明实施例通过将预先生成的密码校验代码植入风光预测算法文件中,对执行风光预测算法文件的设备进行校验,将植入密码校验代码的风光预测算法文件编译为二进制动态库,能防止基于python的风光预测算法文件被篡改、被逆向和被非法拷贝,能更有效地保护代码安全性,能提高风光预测算法文件的安全性,能提高电网系统的运行安全性。并且,不需要修改服务中python解释器等运行环境,采用更轻量级的只针对算法文件进行加密的方法,更加简单、方便,能提高加密的效率。

基于上述各实施例的内容,将预先生成的密码校验代码植入风光预测算法文件中之前,还包括:根据预设的单向加密算法和合法设备的硬件信息,生成初始校验信息。

可以理解的是,不同设备的硬件信息不同,因此,可以基于设备硬件信息区别不同的设备,基于设备硬件信息对设备进行校验。

具体地,将合法设备的硬件信息作为单向加密算法的输入,通过单向加密算法对合法设备的硬件信息进行加密,生成初始校验信息。

某一设备执行风光预测算法文件时,执行到用于实现风光预测算法的代码,先执行密码校验代码,调用相应的函数生成该设备的临时验证信息。

比较临时验证信息和初始校验信息是否相同,若相同,则校验成功;若不同,则校验失败。

通过基于上述硬件信息生成校验信息,能保证每台设备都对应唯一的初始校验信息,被加密的文件如果拷贝到其他设备上会因硬件信息受限而无法运行,从而能防止非法拷贝。

本发明实施例根据预设的单向加密算法和合法设备的硬件信息,生成初始校验信息,由于单向加密算法是单向不可逆的,能有效地防止彩虹表攻击,能提高安全性。

基于上述各实施例的内容,根据预设的单向加密算法和合法设备的硬件信息,生成初始校验信息,与将预先生成的密码校验代码植入风光预测算法文件中之间,还包括:根据单向加密算法,生成密码校验代码。

具体地,根据单向加密算法的算法流程和参数,自动生成密码校验代码。

单向加密算法的参数,可以包括运算的次数和算法用到的中间值等。

本发明实施例根据单向加密算法,生成密码校验代码,能基于密码校验代码对执行风光预测算法文件的设备进行校验,能更有效地防止基于python的风光预测算法文件被非法拷贝,能提高安全性。

基于上述各实施例的内容,将植入密码校验代码的风光预测算法文件编译为二进制动态库之后,还包括:将二进制动态库和存储初始校验信息的文件进行打包。

需要说明的是,生成初始校验信息之后,可以通过密钥文件(key文件)存储生成的初始校验信息。

具体地,植入密码校验代码的风光预测算法文件编译为二进制动态库之后,先删除编译过程中所产生的中间临时文件与源码文件。

删除编译过程中所产生的中间临时文件与源码文件之后,将二进制动态库打包成压缩包。

将密钥文件放入该压缩包内的固定位置,以便执行密码校验代码时,读取到密钥文件,获取密钥文件存储的初始校验信息,并比较验证信息和初始校验信息。

本发明实施例通过将二进制动态库和存储初始校验信息的文件进行打包,是实现将根据风光预测算法文件生成的程序的自动化部署,提高部署效率。并且,删除编译过程中所产生的中间临时文件与源码文件,能防止基于python的风光预测算法文件被逆向,能进一步提高安全性。

基于上述各实施例的内容,硬件信息包括:中央处理器的标识、主板的标识、硬盘的标识和网卡的mac地址中的至少一种。

具体地,中央处理器(cpu,centralprocessingunit)的标识(id,identitydocument)可以用于区别不同的cpu。

主板的标识(id),可以用于区别不同的主板。

硬盘的标识(id),可以用于区别不同的硬盘。

网卡的mac地址,可以用于区别不同的网卡。

因此,可以将设备的cpu的id、主板的id、硬盘的id和网卡的mac地址中的至少一个,作为该设备的硬件信息。

通过基于上述硬件信息生成校验信息,能保证每台设备都对应唯一的key文件,被加密的文件如果拷贝到其他设备上会因硬件信息受限而无法运行,从而能防止非法拷贝。

本发明实施例基于设备的硬件信息对设备进行校验,能更有效地防止基于python的风光预测算法文件被非法拷贝,能提高安全性。

基于上述各实施例的内容,单向加密算法为pbkdf2算法。

具体地,pbkdf2算法应用一个伪随机函数以导出密钥。

根据pbkdf2算法和合法设备的硬件信息,生成初始校验信息的步骤包括:

将合法设备的硬件信息组成的字符串转换为md5码,作为加密环节中的公钥(即明文);

通过一个伪随机函数将明文和一个盐值作为输入参数进行hash运算,将结果作为新的盐值再与明文进行hash运算,多次重复后最终生成初始校验信息。

第一次生成的盐值(salt值),是一组随机生成的16位随机字符,该字符包含大小写字母、阿拉伯数组、特殊符号。它将作为加密环节中的私钥。

pbkdf2算法的参数包括私钥和重复次数。

重复次数,指根据pbkdf2算法中,进行hash运算的次数,即加密算法中迭代次数,该次数越高逆向破解难度越大同时加密运算时间也越长。

pbkdf2算法的重复次数可以达到上千次,逆向耗时需要耗费几百年,从而能有效的防止彩虹表攻击。

根据pbkdf2算法,生成密码校验代码时,将私钥和重复次数以硬编码方式作为两个常量写入密码校验代码中。

某一设备执行风光预测算法文件时,执行到用于实现风光预测算法的代码,先执行密码校验代码,调用相应的函数,根据该设备的硬件信息组成的字符串转换为md5码,作为第二公钥;根据第二公钥、私钥和重复次数进行迭代的hash运算,生成临时校验信息;在压缩包内的固定位置获取初始校验信息,通过比较初始校验信息和临时校验信息,对该设备进行校验。

本发明实施例基于pbkdf2算法进行单向加密,能更有效地防止彩虹表攻击,能防止基于python的风光预测算法文件被篡改和被逆向,能提高安全性。

基于上述各实施例的内容,风光预测算法文件为一个或多个。

具体地,待加密的风光预测算法文件可以为一个或多个。

可以根据选择指令确定用户选定的一个或多个后缀为.py的风光预测算法文件,或用户选定的一个目录下所有的后缀为.py的风光预测算法文件作为待加密的风光预测算法文件,记录并保存待加密的风光预测算法文件的路径。

本发明实施例通过对待加密的风光预测算法文件进行批处理,能提高加密的效率。

图2为根据本发明实施例提供的加密基于python的风光预测算法文件的装置的结构示意图。基于上述各实施例的内容,如图2所示,该装置包括代码植入模块201和文件编译模块202,其中:

代码植入模块201,用于将预先生成的密码校验代码植入风光预测算法文件中,以使得密码校验代码在用于实现风光预测算法的代码之前执行;

文件编译模块202,用于将植入密码校验代码的风光预测算法文件编译为二进制动态库;

其中,密码校验代码,用于对执行风光预测算法文件的设备进行校验。

具体地,代码植入模块201和文件编译模块202电连接。

代码植入模块201在待加密的风光预测算法文件中被加密算法(风光预测算法)的主入口函数中插入一段预先生成的密码校验代码。

该密码校验代码,可以为python脚本。该密码校验代码提供一个可被调用的函数。

某一设备执行风光预测算法文件时,执行到用于实现风光预测算法的代码,先执行密码校验代码,调用上述可被调用的函数生成该设备的临时验证信息,并根据该设备的验证信息对该设备进行校验,验证该设备是否为合法设备。

文件编译模块202通过python的超集cython可将*.py扩展名的脚本文件(即植入密码校验后的风光预测算法文件)编译成二进制动态库来执行,编译后的.so文件使用起来与.py文件无差异。由于二进制的不可见性,有效地防止了代码泄露与恶意篡改。

本发明实施例提供的加密基于python的风光预测算法文件的装置,用于执行本发明上述各实施例提供的加密基于python的风光预测算法文件的方法,该加密基于python的风光预测算法文件的装置包括的各模块实现相应功能的具体方法和流程详见上述加密基于python的风光预测算法文件的方法的实施例,此处不再赘述。

该加密基于python的风光预测算法文件的装置用于前述各实施例的加密基于python的风光预测算法文件的方法。因此,在前述各实施例中的加密基于python的风光预测算法文件的方法中的描述和定义,可以用于本发明实施例中各执行模块的理解。

本发明实施例通过将预先生成的密码校验代码植入风光预测算法文件中,对执行风光预测算法文件的设备进行校验,将植入密码校验代码的风光预测算法文件编译为二进制动态库,能防止基于python的风光预测算法文件被篡改、被逆向和被非法拷贝,能更有效地保护代码安全性,能提高风光预测算法文件的安全性,能提高电网系统的运行安全性。并且,不需要修改服务中python解释器等运行环境,采用更轻量级的只针对算法文件进行加密的方法,更加简单、方便,能提高加密的效率。

图3为根据本发明实施例提供的电子设备的实体结构示意图。基于上述实施例的内容,如图3所示,该电子设备可以包括:处理器(processor)301、存储器(memory)302和总线303;其中,处理器301和存储器302通过总线303完成相互间的通信;处理器301用于调用存储在存储器302中并可在处理器301上运行的计算机程序指令,以执行上述各方法实施例所提供的加密基于python的风光预测算法文件的方法,例如包括:将预先生成的密码校验代码植入风光预测算法文件中,以使得密码校验代码在用于实现风光预测算法的代码之前执行;将植入密码校验代码的风光预测算法文件编译为二进制动态库;其中,密码校验代码,用于对执行风光预测算法文件的设备进行校验。

本发明另一实施例公开一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的加密基于python的风光预测算法文件的方法,例如包括:将预先生成的密码校验代码植入风光预测算法文件中,以使得密码校验代码在用于实现风光预测算法的代码之前执行;将植入密码校验代码的风光预测算法文件编译为二进制动态库;其中,密码校验代码,用于对执行风光预测算法文件的设备进行校验。

此外,上述的存储器302中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本发明另一实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述各方法实施例所提供的加密基于python的风光预测算法文件的方法,例如包括:将预先生成的密码校验代码植入风光预测算法文件中,以使得密码校验代码在用于实现风光预测算法的代码之前执行;将植入密码校验代码的风光预测算法文件编译为二进制动态库;其中,密码校验代码,用于对执行风光预测算法文件的设备进行校验。

以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行上述各个实施例或者实施例的某些部分的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1