一种保护R语言源代码的方法和装置制造方法及图纸

技术编号:38391175 阅读:20 留言:0更新日期:2023-08-05 17:44
本申请公开了一种保护R语言源代码的方法和装置,该方法包括以下步骤:将所述R语言源代码中的输入参数编码成为多个变量,并将所述多个变量存储到输入参数编码文件中;将所述R语言源代码中的每一行代码分别编码为参数、代码符号和表达式,并将编码得到的没有语境的多个变量存储到源代码编码文件中;对所述输入参数编码文件和所述源代码编码文件进行传输或运行。本申请实施例通过对R语言源代码中的输入参数和每一行代码分别编码,并将编码得到的文件进行传输或运行,能够避免源代码的内容被暴露,提升源代码在传输或运行过程中的安全性。提升源代码在传输或运行过程中的安全性。提升源代码在传输或运行过程中的安全性。

【技术实现步骤摘要】
一种保护R语言源代码的方法和装置


[0001]本申请属于计算机
,具体涉及一种保护R语言源代码的方法和装置。

技术介绍

[0002]R语言是一种计算机语言,由R语言编制的R程序通常作为桌面程序被数据分析师使用,常用于完成数据处理、数据分析、数据可视化等等工作。R语言本身是一套完备的软件系统,既包括R语言解释器、也包括一套完整的图形用户界面。
[0003]由于R语言是解释型编程语言,R语言解释器需要R语言的源代码执行。因此,在使用R程序时,就会不可避免地暴露其程序源代码,导致开发者无法有效地保护源代码。
[0004]申请内容
[0005]本申请实施例的目的是提供一种保护R语言源代码的方法和装置,以解决现有技术中的R语言源代码容易被暴露的缺陷。
[0006]为了解决上述技术问题,本申请是这样实现的:
[0007]第一方面,提供了一种保护R语言源代码的方法,包括以下步骤:
[0008]将所述R语言源代码中的输入参数编码成为多个变量,并将所述多个变量存储到输入参数编码文件中;
[0009]将所述R语言源代码中的每一行代码分别编码为参数、代码符号和表达式,并将编码得到的没有语境的多个变量存储到源代码编码文件中;
[0010]对所述输入参数编码文件和所述源代码编码文件进行传输或运行。
[0011]第二方面,提供了一种保护R语言源代码的装置,包括:
[0012]第一编码模块,用于将所述R语言源代码中的输入参数编码成为多个变量,并将所述多个变量存储到输入参数编码文件中;
[0013]第二编码模块,用于将所述R语言源代码中的每一行代码分别编码为参数、代码符号和表达式,并将编码得到的没有语境的多个变量存储到源代码编码文件中;
[0014]处理模块,用于对所述输入参数编码文件和所述源代码编码文件进行传输或运行。
[0015]本申请实施例通过对R语言源代码中的输入参数和每一行代码分别编码,并将编码得到的文件进行传输或运行,能够避免源代码的内容被暴露,提升源代码在传输或运行过程中的安全性。
附图说明
[0016]图1是本申请实施例提供的一种保护R语言源代码的方法流程图;
[0017]图2是本申请实施例提供的保护R语言源代码的方法的一种具体实现图;
[0018]图3是本申请实施例提供的源代码的示意图;
[0019]图4是本申请实施例提供的源代码对应的编码结果的示意图;
[0020]图5是本申请实施例提供的一种保护R语言源代码的装置的结构示意图。
具体实施方式
[0021]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0022]本申请实施例提供了一种保护R程序源代码传输及运行时不暴露源码的方法,主要包括以下三个方面:
[0023]1.输入参数编码:源代码运行所需要的输入参数,将其编码成为多个变量并存储在输入参数编码文件中;
[0024]2.源代码编码:读取源代码,通过一定的编码规则,将每一行源代码都编码成为参数名、代码符号、表达式三个部分。处理完成后,会得到多个简单变量,这些变量包含了编码后的源代码中的所有信息,然后将变量存储到源代码编码文件中;
[0025]3.编码后的文件解码:通过读取输入参数编码文件,解码得到输入参数。通过读取源代码编码文件,解码并封装成为一个R6类(R6是R语言面向对象编程的一种数据结构,是一个静态的类,需要实例化后才能被内存加载运行;一个R6类对象由类名、公有方法和属性、私有方法和属性构成,其中公有方法和属性也称为公有成员,能够在R6类外进行调用;私有方法和属性称为私有成员,只能够在R6类内进行调用)对象,然后实例化该R6对象,运行程序。解码过程,并不会复原原始代码,而是新生成一个被封装R6对象,可执行与原始代码相同功能。
[0026]为了实现上述目的,本申请实施例提供了如下方案:
[0027]1.本方法提供基础的编码规则,根据R语言编写过程中具有明确且唯一的定义符号进行匹配,来识别该行语句的组成成分,从而将其分为参数名、代码符号、表达式三部分,其中编码的过程中代码符号可以使用一些关键词进行替换,比如

<
‑’
定义符号可以在编码文件中写为

assignment_symbol

。其次因为代码的上下文存在关联,所以在编码文件的表达式部分也会有从属关系(比如在函数定义时

tmp<

function(){}

,函数内的处理逻辑会定义在

{}

中,那么

{}

内的语句都从属于该tmp函数,所以在编码时,

{}

内的语句编码得到的变量都会从属于

tmp

变量)。
[0028]2.本方法解码规则提供封装功能,如果直接运行源代码的话会在运行环境中显示代码中的变量以及函数,所以为了解决这个问题,在解码过程中,直接将解码结果封装成为一个R6类。
[0029]3.本方法提供基础的解码规则,根据方法中的解码规则进行解码,并生成R6类结构。在生成R6类结构时,将所有的函数写到R6类的私有成员的方法中,其它的部分都写入R6类的公有成员的方法中(关于具体的区分方法,在下面第八部分的详细处理过程中的6.3.1中有说明)。
[0030]4.上述步骤便是本方法的核心过程,通过调用第1步,将源代码编码成源代码编码文件,将输入参数编码成输入参数编码文件,然后得到两个编码文件,然后可以对这两个编码文件进行传输或运行。运行的时候,通过调用第3步,将编码文件解码为R6类,然后通过实例化R6类,调用R6类对象来运行源代码。
[0031]下面结合附图,通过具体的实施例及其应用场景对本申请实施例提供的一种保护
R语言源代码的方法进行详细地说明。
[0032]如图1所示,为本申请实施例提供的一种保护R语言源代码的方法流程图,该方法包括以下步骤:
[0033]步骤101,将所述R语言源代码中的输入参数编码成为多个变量,并将所述多个变量存储到输入参数编码文件中。
[0034]步骤102,将所述R语言源代码中的每一行代码分别编码为参数、代码符号和表达式,并将编码得到的没有语境的多个变量存储到源代码编码文件中。
[0035]具体地,可以根据R语言编写过程中具有明确且唯一的定义符号进行匹配,识别每一行代码的组成成分,分别将每一行代码分为参数、代码符号和表达式三部分。
[0036]步骤1本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种保护R语言源代码的方法,其特征在于,包括以下步骤:将所述R语言源代码中的输入参数编码成为多个变量,并将所述多个变量存储到输入参数编码文件中;将所述R语言源代码中的每一行代码分别编码为参数、代码符号和表达式,并将编码得到的没有语境的多个变量存储到源代码编码文件中;对所述输入参数编码文件和所述源代码编码文件进行传输或运行。2.根据权利要求1所述的方法,其特征在于,对所述输入参数编码文件和所述源代码编码文件进行运行,具体包括:对所述输入参数编码文件进行解码,得到输入参数;将所述源代码编码文件解码并封装成为R6类对象;实例化所述R6类对象,并加载运行所述R6类对象。3.根据权利要求2所述的方法,其特征在于,所述对所述输入参数编码文件进行解码,得到输入参数,具体包括:生成R6类对象,对所述输入参数编码文件进行解码,将解码得到的输入参数作为R6类对象中的公有成员的属性,并编写初始化函数。4.根据权利要求2所述的方法,其特征在于,所述将所述源代码编码文件解码并封装成为R6类对象,具体包括:读取所述源代码编码文件,遍历所述源代码编码文件中的所有变量,记录所有的输入参数和函数名称,并根据参数、代码符号和表达式的编码规则,对所述源代码编码文件进行解码;将解码得到的公有成员部分写入R6类对象的公有成员中,作为整个源代码的处理逻辑和启动入口;将解码得到的私有成员部分写入R6类对象的私有成员中作为核心处理函数,并将公有成员部分中涉及到的私有成员部分的函数和输入变量,处理成R6类的调用格式。5.根据权利要求1所述的方法,其特征在于,所述将所述R语言源代码中的每一行代码分别编码为参数、代码符号和表达式,具体包括:根据R语言编写过程中具有明确且唯一的定义符号进行匹配,识别每一行代码的组成成分,分别将每一行代码分为参数、代码符号和...

【专利技术属性】
技术研发人员:张丹晁亚伟熊晓菁
申请(专利权)人:北京青萌数海科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1