CN111931205A - 一种加密着色器文件的方法和装置 - Google Patents

一种加密着色器文件的方法和装置 Download PDF

Info

Publication number
CN111931205A
CN111931205A CN202010724619.2A CN202010724619A CN111931205A CN 111931205 A CN111931205 A CN 111931205A CN 202010724619 A CN202010724619 A CN 202010724619A CN 111931205 A CN111931205 A CN 111931205A
Authority
CN
China
Prior art keywords
utf
code
binary number
encryption
binary
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010724619.2A
Other languages
English (en)
Inventor
杨旭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Wodong Tianjun Information Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Jingdong Century Trading Co Ltd, Beijing Wodong Tianjun Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN202010724619.2A priority Critical patent/CN111931205A/zh
Publication of CN111931205A publication Critical patent/CN111931205A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/602Providing cryptographic facilities or services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Bioethics (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种加密着色器文件的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;遍历所述文本流,将所述文本流中的字符编码为utf‑8码;利用预定加密算法对utf‑8码进行加密,基于加密后的字符串生成第二着色器文件。该实施方式使用自研加密算法对着色器文件进行位运算,使明文着色器代码无法直接运行,降低其可编辑性,保证了文件的安全性。

Description

一种加密着色器文件的方法和装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种加密着色器文件的方法和装置。
背景技术
着色器(Shader)是用来实现图像渲染、替代固定渲染管线的可编辑程序。在现有虚拟场景中,着色器替代了传统的固定渲染管线,可以实现3D图形学中的相关计算,且由于其可编辑性,可以实现多样图像效果而不受显卡的固定渲染管线限制,极大提高了图像的画质。
在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
现有着色器文件是可以直接使用的,由于其可编辑性,导致其易篡改、安全性较差,而现有并未提出对着色器代码加密的相关方法。
发明内容
有鉴于此,本发明实施例提供一种加密着色器文件的方法和装置,至少能够解决现有技术中未加密着色器代码的现象。
为实现上述目的,根据本发明实施例的一个方面,提供了一种加密着色器文件的方法,包括:
运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
遍历所述文本流,将所述文本流中的字符编码为utf-8码;
利用预定加密算法对utf-8码进行加密,基于加密后的字符串生成第二着色器文件。
可选的,在所述将待加密的第一着色器文件由二进制流转换为文本流之前,还包括:
读取所述第一着色器文件的第一文件名称和存储路径,以从与所述存储路径对应的项目文件中,读取与所述第一文件名称对应的第一着色器文件;
在所述基于加密后的字符串生成第二着色器文件之后,还包括:
将所述第二着色器文件存储至与所述存储路径对应的项目文件中,并将所述第二着色器文件的第二文件名称设置为所述第一文件名称和预定字符的组合形式。
可选的,所述将所述文本流中的字符编码为utf-8码,包括:
确定与所述文本流中字符对应的十六进制ASCII码,将十六进制ASCII码作为unicode编号;
将unicode编号转换为二进制数,按照从右向左的顺序,依次将二进制数中的数值填入预定二进制格式的空格中,得到utf-8码。
可选的,在所述确定与所述文本流中字符对应的ASCII码之前,还包括:将所述文本流中的换行符统一替换为预定格式的换行符。
可选的,所述利用预定加密算法对utf-8码进行加密,包括:
按照utf-8码的排序,提取三个utf-8码,将第一个utf-8码中的二进制数右移两位,得到第一加密位;
将第一个utf-8码中的二进制数与第一预定二进制数做按位与运算并左移四位,将第二个utf-8码中的二进制数右移四位,两者做或运算,得到第二加密位;
将第二个utf-8码中的二进制数与第二预定二进制数做按位与运算并左移两位,将第三个utf-8码中的二进制数右移六位,两者做或运算,得到第三加密位;
将第三个utf-8码中的二进制数与第三预定二进制数做按位与运算,得到第四加密位;
分别将第一加密位、第二加密位、第三加密位和第四加密位转换为ASCII码,查询与各ASCII码对应的字符并组合,得到四位加密字符串。
可选的,所述方法还包括:当不存在第二个utf-8码和第三个utf-8码时,将第三加密位和第四加密位设置为第四预定二进制数;或
当不存在第三个utf-8码时,将第四加密位设置为第四预定二进制数。
可选的,在所述基于加密后的字符串生成第二着色器文件之后,还包括:
响应于对所述第二着色器文件的加载操作,读取所述第二着色器文件中加密后的字符串;
按照预定解密算法对所述加密后的字符串进行解密,得到utf-8码;
对utf-8码进行解码,得到字符并组合为文本流,将所述文本流转换为二进制流,得到所述第一着色器文件。
可选的,所述按照预定解密算法对所述加密后的字符串进行解密,得到utf-8码,包括:
按照加密字符的排列顺序,提取四位加密字符,查询与各加密字符对应的ASCII码并转换为二进制数,得到第一加密位、第二加密位、第三加密位和第四加密位;
将第一加密位中的二进制数左移两位,将第二加密位中的二进制数右移四位,两者做或运算,得到第一个utf-8码;
将第二加密位中的二进制数与第二预定二进制数做按位与运算并左移四位,将第三加密位中的二进制数右移两位,两者做或运算,得到第二个utf-8码;
将第三加密位中的二进制数与第一预定二进制数做按位与运算并左移六位,与第四加密位中的二进制数做或运算,得到第三个utf-8码。
可选的,所述方法还包括:
判断第三加密位是否为第四预定二进制数,若判断结果为是,则将第二个utf-8码和第三个utf-8码设置为空;
若判断结果为不是,则判断第四加密位是否为第四预定二进制数,若判断结果为是,则将第三个utf-8码设置为空。
可选的,所述对utf-8码进行解码,得到字符并组合为文本流,包括:从左至右以四位二进制数为一组,将一utf-8码分为两组二进制数,分别将各组二进制数转换为十六进制,得到两个十六进制数;
从ASCII码表中查询与组合的两个十六进制数对应的字符;
按照utf-8码的排列顺序,对查询到的字符进行排列组合,得到文本流。
为实现上述目的,根据本发明实施例的另一方面,提供了一种加密着色器文件的装置,包括:
转换模块,用于运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
编码模块,用于遍历所述文本流,将所述文本流中的字符编码为utf-8码;
加密模块,用于利用预定加密算法对utf-8码进行加密,基于加密后的字符串生成第二着色器文件。
可选的,还包括读取模块,用于:读取所述第一着色器文件的第一文件名称和存储路径,以从与所述存储路径对应的项目文件中,读取与所述第一文件名称对应的第一着色器文件;
以及存储模块,用于:将所述第二着色器文件存储至与所述存储路径对应的项目文件中,并将所述第二着色器文件的第二文件名称设置为所述第一文件名称和预定字符的组合形式。
可选的,所述编码模块,用于:确定与所述文本流中字符对应的十六进制ASCII码,将十六进制ASCII码作为unicode编号;
将unicode编号转换为二进制数,按照从右向左的顺序,依次将二进制数中的数值填入预定二进制格式的空格中,得到utf-8码。
可选的,所述编码模块,还用于:将所述文本流中的换行符统一替换为预定格式的换行符。
可选的,所述加密模块,用于:按照utf-8码的排序,提取三个utf-8码,将第一个utf-8码中的二进制数右移两位,得到第一加密位;
将第一个utf-8码中的二进制数与第一预定二进制数做按位与运算并左移四位,将第二个utf-8码中的二进制数右移四位,两者做或运算,得到第二加密位;
将第二个utf-8码中的二进制数与第二预定二进制数做按位与运算并左移两位,将第三个utf-8码中的二进制数右移六位,两者做或运算,得到第三加密位;
将第三个utf-8码中的二进制数与第三预定二进制数做按位与运算,得到第四加密位;
分别将第一加密位、第二加密位、第三加密位和第四加密位转换为ASCII码,查询与各ASCII码对应的字符并组合,得到四位加密字符串。
可选的,所述加密模块,还用于:当不存在第二个utf-8码和第三个utf-8码时,将第三加密位和第四加密位设置为第四预定二进制数;或当不存在第三个utf-8码时,将第四加密位设置为第四预定二进制数。
可选的,还包括解密模块,用于:响应于对所述第二着色器文件的加载操作,读取所述第二着色器文件中加密后的字符串;
按照预定解密算法对所述加密后的字符串进行解密,得到utf-8码;
对utf-8码进行解码,得到字符并组合为文本流,将所述文本流转换为二进制流,得到所述第一着色器文件。
可选的,所述解密模块,用于:按照加密字符的排列顺序,提取四位加密字符,查询与各加密字符对应的ASCII码并转换为二进制数,得到第一加密位、第二加密位、第三加密位和第四加密位;
将第一加密位中的二进制数左移两位,将第二加密位中的二进制数右移四位,两者做或运算,得到第一个utf-8码;
将第二加密位中的二进制数与第二预定二进制数做按位与运算并左移四位,将第三加密位中的二进制数右移两位,两者做或运算,得到第二个utf-8码;
将第三加密位中的二进制数与第一预定二进制数做按位与运算并左移六位,与第四加密位中的二进制数做或运算,得到第三个utf-8码。
可选的,所述解密模块,还用于:判断第三加密位是否为第四预定二进制数,若判断结果为是,则将第二个utf-8码和第三个utf-8码设置为空;
若判断结果为不是,则判断第四加密位是否为第四预定二进制数,若判断结果为是,则将第三个utf-8码设置为空。
可选的,所述解密模块,用于:从左至右以四位二进制数为一组,将一utf-8码分为两组二进制数,分别将各组二进制数转换为十六进制,得到两个十六进制数;
从ASCII码表中查询与组合的两个十六进制数对应的字符;
按照utf-8码的排列顺序,对查询到的字符进行排列组合,得到文本流。
为实现上述目的,根据本发明实施例的再一方面,提供了一种加密着色器文件的电子设备。
本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一所述的加密着色器文件的方法。
为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一所述的加密着色器文件的方法。
根据本发明所述提供的方案,上述发明中的一个实施例具有如下优点或有益效果:为防止着色器被直接使用,使用自研加密算法对着色器文件进行位运算,使明文着色器代码无法直接运行,降低其可编辑性,保证了文件的安全性;后续使用前需通过加密算法的反向即解密算法进行解密,保证了着色器文件的正常使用。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的一种加密着色器文件的方法的主要流程示意图;
图2是根据本发明实施例的一种可选的加密着色器文件的方法的流程示意图;
图3是根据本发明实施例的另一种可选的加密着色器文件的方法的流程示意图;
图4是根据本发明实施例的又一种可选的加密着色器文件的方法的流程示意图;
图5是根据本发明实施例的一种解码utf-8码的方法的流程示意图;
图6是根据本发明实施例的一种加密着色器文件的装置的主要模块示意图;
图7是本发明实施例可以应用于其中的示例性系统架构图;
图8是适于用来实现本发明实施例的移动设备或服务器的计算机系统的结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
参见图1,示出的是本发明实施例提供的一种加密着色器文件的方法的主要流程图,包括如下步骤:
S101:运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
S102:遍历所述文本流,将所述文本流中的字符编码为utf-8码;
S103:利用预定加密算法对utf-8码进行加密,基于加密后的字符串生成第二着色器文件。
上述实施方式中,对于步骤S101,当待加密的着色器文件(即第一着色器文件)数量仅有一个时,可以直接运行加密脚本执行加密操作。也可以无论数量多少,均预先将所有第一着色器文件的信息,如文件名称和存储路径(预先人工配置),写入配置文件中。其中,着色器文件可以存储于计算机本地,也可以存储于互联网中,但优选存储于计算机本地。
配置文件通常是一个以“.js”为后缀的javascript文件,按照固定格式记录各个第一着色器文件的文件名称和存储路径、以及加密方式等配置信息。后续读取着色器文件时,需按照配置文件内记录的存储路径读取相应着色器文件。进一步的,可能该路径下存储有多个着色器文件,因此还需通过文件名称进行筛选,以提取正确的待加密着色器文件。
在开发过程中,经常会遇到二进制数据转文本的需求,常见的应用场景如需要打印的时候、跨应用交互、传输协议不支持等。本方案由于是对utf-8(unicodetransformation forma,8位元)的编码进行操作,因此在获取到第一着色器文件后,还需要将其由二进制流转换为文本流。且文本是有编码格式的,根据不同的编码格式,可以将二进制流转换为不同格式的字符。
对于步骤S102,后续的加密操作是针对utf-8码进行的,因而需将文本流中的字符转换为utf-8码格式,但目前并没有直接将字符转为utf-8码的方法。本方案采用Base64方式首先字符转换为unicode编号,之后再将unicode编号转换为utf-8码,具体参见后续图2所示描述。
通常base64用于程序与程序之间的数据交换,而非人类识别,有时转换后的数据可能比原始数据更不可识别,因此还可称之为“加密”。其实现基本原理为:大小写字母、10个阿拉伯数字(0~9)以及"+"和"/"总共64个可打印字符来转换、表达任意二进制数。
utf-8码为8位二进制数,base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在http环境下传递较长的标识信息,在其他应用程序中,也需将二进制数据编码为适合放在URL(Uniform Resource Locator,统一资源定位符)(包括隐藏表单域)中的形式。
对于步骤S103,使用自研加密算法(即预定加密算法),加密utf-8码得到加密后的第二着色器文件,具体加密方式参见后续图3所示描述。根据第一着色器文件的存储路径,将加密后的第二着色器文件保存在相同路径中,并将其文件名设置为“第一文件名+_encode”形式。
项目文件夹是项目工程整体的文件夹,一个项目工程除了着色器文件外,还有js文件、html文件等。通过配置文件中存储的第一着色器文件的存储路径,读取位于项目文件夹中的第一着色器文件,对其进行加密处理,将加密后的第二着色器文件同样存储于项目文件夹中。
上述实施例所提供的方法,使用自研加密算法对着色器文件进行位运算,实现文件加密,降低其可编辑性,保证了文件的安全性。
参见图2,示出了根据本发明实施例的一种可选的加密着色器文件的方法流程示意图,包括如下步骤:
S201:运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
S202:遍历所述文本流,确定与所述文本流中字符对应的十六进制ASCII码,将十六进制ASCII码作为unicode编号;
S203:将unicode编号转换为二进制数,按照从右向左的顺序,依次将二进制数中的数值填入预定二进制格式的空格中,得到utf-8码;
S204:利用预定加密算法对utf-8码进行加密,基于加密后的字符串生成第二着色器文件。
上述实施方式中,对于步骤S201和S204可参见图1所示步骤S101和S103的描述,在此不再赘述。
上述实施方式中,对于步骤S202和S203,在Java中实现base64有很多库可以支持,若是Java 1.6/1.7,可以使用apache common-codec,若是Java 1.8,可以使用标准库中的java.util.Base64,若是Android系统,可以直接使用android.util.base64。
Base64编码格式如下:
Figure BDA0002601211700000101
Figure BDA0002601211700000111
目前并无直接将字符转为utf-8码的方法,需首先转换为unicode编号。具体实施流程为:
1、ASCII码分有二进制、十进制和十六进制,而unicode编号为十六进制,因此依据ASCII码表,直接确定将文本流中的字符转换为十六进制的ASCII码;例如,字符“H”的十六进制ASCII码为48。
进一步的,也可以先考虑十进制的ASCII码,例如字符“H”的十进制ASCII码为72,后续需将其转换为十六进制48。
2、将unicode编号转换为二进制数,并去掉高位0,如0100中的首位0。
3、按照从右向左的顺序,依次将二进制数中的数值填入预定二进制格式的x(即空格)中,如还有x未填写,则补0,得到utf-8码。
Unicode为世界上的所有字符均分配了一个唯一的数字编号,编号范围从0x000000到0x10FFFF(十六进制)共110多万个。unicode编号前128位与utf-8码相同,本方案主要考虑处于0~65535范围内的unicode编号,相应二进制格式分别为:
unicode编号(十六机制) utf-8码格式(二进制)
0000 0000~0000 007F 0xxxxxxx
0000 0080~0000 07FF 110xxxxx 10xxxxxx
0000 0800~0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
为便于后续统一管理,本方案将utf-8码方式统一设置为24位,不足24位处补0,因此一个字符对应于3个utf-8码。例如48处于第一个编号范围,相应二进制格式为0000000000000000 0xxxxxxx,将48转换的二进制数1001000依次填入该二进制格式中,得到00000000 00000000 01001000共3个utf-8码。
4、最终将每个字符均转换为3个utf-8码;如字符“H”对应于0000 0000 0000000001001000共3个utf-8码。
进一步的,在将字符转换为unicode编号之前,还可以对文本流进行预处理,例如,将\r和\n换行符统一替换为\n,以确保换行格式的正确性,降低后续转换错误率。
上述实施例所提供的方法,采用Base64编码的不可读性,即所编码的数据不会被人用肉眼直接看到的特征,对文本流中的字符进行加密,以转换为8Bit字节的utf-8码。
参见图3,示出了根据本发明实施例的另一种可选的加密着色器文件的方法流程示意图,包括如下步骤:
S301:运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
S302:遍历所述文本流,将所述文本流中的字符编码为utf-8码;。
S303:按照utf-8码的排序,提取三个utf-8码,将第一个utf-8码中的二进制数右移两位,得到第一加密位;
S304:将第一个utf-8码中的二进制数与第一预定二进制数做按位与运算并左移四位,将第二个utf-8码中的二进制数右移四位,两者做或运算,得到第二加密位;
S305:将第二个utf-8码中的二进制数与第二预定二进制数做按位与运算并左移两位,将第三个utf-8码中的二进制数右移六位,两者做或运算,得到第三加密位;
S306:将第三个utf-8码中的二进制数与第三预定二进制数做按位与运算,得到第四加密位;
S307:分别将第一加密位、第二加密位、第三加密位和第四加密位转换为ASCII码,查询与各ASCII码对应的字符并组合,得到四位加密字符串;
S308:基于加密后的字符串生成第二着色器文件。
上述实施方式中,对于步骤S301、S302和S308,可参见图1所示步骤S101~S103的描述,在此不再赘述。
上述实施方式中,对于步骤S303~S307,本方案自研一种加密算法,相关代码如下所示:
Figure BDA0002601211700000131
Figure BDA0002601211700000141
具体实施流程为:
1、为保证文本流中字符均转换为utf-8码,首先使用Base64再次处理;
2、由于本方案设置一个字符对应于三个utf-8码,因此加密时也是3个utf-8码为一组(对应于chr1,chr2,chr3)进行加密,得到4个加密位(对应于enc1,enc2,enc3,enc4):
①enc1通过chr1右移两位得到;
②enc2通过chr1与011(即第一预定二进制数)做按位与运算,将运算结果左移4位之后,与chr2右移4位进行或运算得到;
③enc3通过chr2与1111(即第二预定二进制数)做按位与运算,将运算结果左移2位之后,与chr3右移6位进行或运算得到。
④enc4是chr3与111111(即第三预定二进制数)的按位与结果。
3、可以首先判断chr2或者chr3是否不存在。若chr2和chr3均不存在,则将enc3和enc4设置为64的二进制数(即第四预定二进制数)。64在ASCII表中对应于@,因为@在着色器文件中是不存在的,所以使用@表示不存在的空字符。
4、将enc1,enc2,enc3,enc4转换为十六进制数,并在ASCII表找出与之对应的字符,组合为加密字符串并输出。
上述实施例所提供的方法,以3个utf-8码为一组,通过位运算方式加密得到4个加密位,以此保证着色器文件中字符的安全性。
参见图4,示出了根据本发明实施例的又一种可选的加密着色器文件的方法流程示意图,包括如下步骤:
S401:运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
S402:遍历所述文本流,将所述文本流中的字符编码为utf-8码;
S403:利用预定加密算法对utf-8码进行加密,基于加密后的字符串生成第二着色器文件;
S404:响应于对所述第二着色器文件的加载操作,读取所述第二着色器文件中加密后的字符串;
S405:按照预定解密算法对所述加密后的字符串进行解密,得到utf-8码;其中,所述预定解密算法为所述预定加密算法的反向;
S406:对utf-8码进行解码,得到字符并组合为文本流,将所述文本流转换为二进制流,得到所述第一着色器文件。
上述实施方式中,对于步骤S401~S403可参见图1所示步骤S101~S103的描述,在此不再赘述。
上述实施方式中,对于步骤S404~S405,加密后的第二着色器文件无法直接使用,使用前需要解密。自研解密算法的代码为:
Figure BDA0002601211700000151
Figure BDA0002601211700000161
加密算法将3个utf-8码(对应于chr1,chr2,chr3)加密为4个加密位(对应于enc1,enc2,enc3,enc4),对应于4个加密字符。解密过程为加密方式的反向,具体实施流程为:
1、按照加密字符的排序顺序提取4个加密字符,从ASCII码表中查询各加密字符的十六进制数。由于utf-8码为二进制,因而需将十六进制数转换为二进制数,以此得到四个二进制数,即四个加密位,包括第一加密位、第二加密位、第三加密位和第四加密位;
2、首先判断enc3是否为64的二进制数(即第四预定二进制数),若是,由于64对应于字符@,代码中不会出现@这个字符,则将chr2和chr3设置为空;但若不是,则继续判断enc4是否为64的二进制数,若是则将chr3设置为空,否则执行正常解密流程;
3、正常解密流程:
①chr1通过将enc1中的二进制数左移2位,将enc2中的二进制数右移4位,两者做或运算得到;
②chr2通过enc2中的二进制数与1111(即第二预定二进制数)做按位与运算,将运算结果左移四位,enc3中的二进制数右移2位,两者做或运算得到;
③chr3通过enc3中的二进制数与011(即第一预定二进制数)做按位与运算,将运算结果左移6位之后,与enc4中的二进制数做或运算得到。
对于步骤S406,解密算法的解密结果为utf-8码,后续需继续对utf-8码进行解码,得到字符以组合为原始第一着色器文件。具体参见后续图5所示描述,在此不再赘述。
上述实施例所提供的方法,加密后的第二着色器文件无法直接使用,使用前需通过加密算法的反向即解密算法进行解密,保证了着色器文件的正常使用。
参见图5,示出了根据本发明实施例的一种解码utf-8码的方法流程示意图,包括如下步骤:
S501:从左至右以四位二进制数为一组,将一utf-8码分为两组二进制数,分别将各组二进制数转换为十六进制,得到两个十六进制数;
S502:从ASCII码表中查询与组合的两个十六进制数对应的字符;
S503:按照utf-8码的排列顺序,对查询到的字符进行排列组合,得到文本流。
上述实施方式中,对于步骤S501~S503,本实施方式讲述utf-8码的解码过程,解码代码如下:
Figure BDA0002601211700000171
Figure BDA0002601211700000181
具体实施流程为(此处具体举例):
1、计算机中的二进制数用以保存和表示信息,如序列0100100001100101。在一个utf-8码中,以4位二进制数为一组,将序列拆分为若干组,如将上述序列分割结果为01001000 0110 0101。
2、将这些2进制序列视为是4个二进制数,每个数有4位。之后将这4个二进制数转换为16进制,得到:4 8 6 5,每一个utf-8码对应于2位16进制数。
因为4个二进制数所能表示的最大16进制数为f,通过上述转换,将位数由原来4位转换为1位,以达到缩短序列长度的目的。
3、将上述4位16进制数强行合并成2位的16进制数,如:48 65。所得2位的16进制数即为unicode编号。
4、对照十六进制ASCII码表,查询到与上述48和65对应的字符“H”和“e”,组合为“He”。
若ASCII码表为十进制,需首先将unicode编号转换为10进制:72 101,之后再在十进制ASCII码表中查询与之相应的字符。
上述从4位二进制数直接向ASCII码表对应的字符翻译,可视为是计算机读取文本文件的原理。实际上由于ASCII字符集能表示的字符已经远远无法满足人们的使用,现在使用的往往是诸如Unicode这样的大型字符集,但是基本原理和使用ASCII字符集别无二致,只是能表示的字符多了一些,需要的二进制位长了一些。
需要说明的是,虽然在编码过程中,需预先将\r和\n换行符统一替换为\n,但解码过程中直接会进行逆转换生成\r和\n,而非仅\n。
上述实施例所提供的方法,根据utf-8码的过程,反向解析,将utf-8反向解码为unicode编号,以此读取相应字符,完成文本流的生成。
参见图6,示出了本发明实施例提供的一种加密着色器文件的装置600的主要模块示意图,包括:
转换模块601,用于运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
编码模块602,用于遍历所述文本流,将所述文本流中的字符编码为utf-8码;
加密模块603,用于利用预定加密算法对utf-8码进行加密,基于加密后的字符串生成第二着色器文件。
本发明实施装置还包括读取模块604(图中未标出),用于:读取所述第一着色器文件的第一文件名称和存储路径,以从与所述存储路径对应的项目文件中,读取与所述第一文件名称对应的第一着色器文件;
以及存储模块605(图中未标出),用于:将所述第二着色器文件存储至与所述存储路径对应的项目文件中,并将所述第二着色器文件的第二文件名称设置为所述第一文件名称和预定字符的组合形式。
本发明实施装置中,所述编码模块602,用于:确定与所述文本流中字符对应的十六进制ASCII码,将十六进制ASCII码作为unicode编号;
将unicode编号转换为二进制数,按照从右向左的顺序,依次将二进制数中的数值填入预定二进制格式的空格中,得到utf-8码。
本发明实施装置中,所述编码模块602,还用于:将所述文本流中的换行符统一替换为预定格式的换行符。
本发明实施装置中,所述加密模块603,用于:按照utf-8码的排序,提取三个utf-8码,将第一个utf-8码中的二进制数右移两位,得到第一加密位;
将第一个utf-8码中的二进制数与第一预定二进制数做按位与运算并左移四位,将第二个utf-8码中的二进制数右移四位,两者做或运算,得到第二加密位;
将第二个utf-8码中的二进制数与第二预定二进制数做按位与运算并左移两位,将第三个utf-8码中的二进制数右移六位,两者做或运算,得到第三加密位;
将第三个utf-8码中的二进制数与第三预定二进制数做按位与运算,得到第四加密位;
分别将第一加密位、第二加密位、第三加密位和第四加密位转换为ASCII码,查询与各ASCII码对应的字符并组合,得到四位加密字符串。
本发明实施装置中,所述加密模块603,还用于:
当不存在第二个utf-8码和第三个utf-8码时,将第三加密位和第四加密位设置为第四预定二进制数;或
当不存在第三个utf-8码时,将第四加密位设置为第四预定二进制数。
本发明实施装置还包括解密模块606(图中未标出),用于:
响应于对所述第二着色器文件的加载操作,读取所述第二着色器文件中加密后的字符串;
按照预定解密算法对所述加密后的字符串进行解密,得到utf-8码;
对utf-8码进行解码,得到字符并组合为文本流,将所述文本流转换为二进制流,得到所述第一着色器文件。
本发明实施装置中,所述解密模块606,用于:
按照加密字符的排列顺序,提取四位加密字符,查询与各加密字符对应的ASCII码并转换为二进制数,得到第一加密位、第二加密位、第三加密位和第四加密位;
将第一加密位中的二进制数左移两位,将第二加密位中的二进制数右移四位,两者做或运算,得到第一个utf-8码;
将第二加密位中的二进制数与第二预定二进制数做按位与运算并左移四位,将第三加密位中的二进制数右移两位,两者做或运算,得到第二个utf-8码;
将第三加密位中的二进制数与第一预定二进制数做按位与运算并左移六位,与第四加密位中的二进制数做或运算,得到第三个utf-8码。
本发明实施装置中,所述解密模块606,还用于:
判断第三加密位是否为第四预定二进制数,若判断结果为是,则将第二个utf-8码和第三个utf-8码设置为空;
若判断结果为不是,则判断第四加密位是否为第四预定二进制数,若判断结果为是,则将第三个utf-8码设置为空。
本发明实施装置中,所述解密模块606,用于:
从左至右以四位二进制数为一组,将一utf-8码分为两组二进制数,分别将各组二进制数转换为十六进制,得到两个十六进制数;
从ASCII码表中查询与组合的两个十六进制数对应的字符;
按照utf-8码的排列顺序,对查询到的字符进行排列组合,得到文本流。
另外,在本发明实施例中所述装置的具体实施内容,在上面所述方法中已经详细说明了,故在此重复内容不再说明。
图7示出了可以应用本发明实施例的示例性系统架构700。
如图7所示,系统架构700可以包括终端设备701、702、703,网络704和服务器705(仅仅是示例)。网络704用以在终端设备701、702、703和服务器705之间提供通信链路的介质。网络704可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备701、702、703通过网络704与服务器705交互,以接收或发送消息等。终端设备701、702、703上可以安装有各种通讯客户端应用。
终端设备701、702、703可以是具有显示屏并且支持网页浏览的各种电子设备,服务器705可以是提供各种服务的服务器。
需要说明的是,本发明实施例所提供的方法一般由服务器705执行,相应地,装置一般设置于服务器705中。
应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
下面参考图8,其示出了适于用来实现本发明实施例的终端设备的计算机系统800的结构示意图。图8示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图8所示,计算机系统800包括中央处理单元(CPU)801,其可以根据存储在只读存储器(ROM)802中的程序或者从存储部分808加载到随机访问存储器(RAM)803中的程序而执行各种适当的动作和处理。在RAM 803中,还存储有系统800操作所需的各种程序和数据。CPU 801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
以下部件连接至I/O接口805:包括键盘、鼠标等的输入部分806;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分807;包括硬盘等的存储部分808;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因特网的网络执行通信处理。驱动器810也根据需要连接至I/O接口805。可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要被安装入存储部分808。
特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分809从网络上被下载和安装,和/或从可拆卸介质811被安装。在该计算机程序被中央处理单元(CPU)801执行时,执行本发明的系统中限定的上述功能。
需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括转换模块、编码模块、加密模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,加密模块还可以被描述为“加密字符模块”。
作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:
运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
遍历所述文本流,将所述文本流中的字符编码为utf-8码;
利用预定加密算法对utf-8码进行加密,基于加密后的字符串生成第二着色器文件。
根据本发明实施例的技术方案,为防止着色器被直接使用,使用自研加密算法对着色器文件进行位运算,使明文着色器代码无法直接运行,降低其可编辑性,保证了文件的安全性;后续使用前需通过加密算法的反向即解密算法进行解密,保证了着色器文件的正常使用。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

Claims (13)

1.一种加密着色器文件的方法,其特征在于,包括:
运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
遍历所述文本流,将所述文本流中的字符编码为utf-8码;
利用预定加密算法对utf-8码进行加密,基于加密后的字符串生成第二着色器文件。
2.根据权利要求1所述的方法,其特征在于,在所述将待加密的第一着色器文件由二进制流转换为文本流之前,还包括:
读取所述第一着色器文件的第一文件名称和存储路径,以从与所述存储路径对应的项目文件中,读取与所述第一文件名称对应的第一着色器文件;
在所述基于加密后的字符串生成第二着色器文件之后,还包括:
将所述第二着色器文件存储至与所述存储路径对应的项目文件中,并将所述第二着色器文件的第二文件名称设置为所述第一文件名称和预定字符的组合形式。
3.根据权利要求1所述的方法,其特征在于,所述将所述文本流中的字符编码为utf-8码,包括:
确定与所述文本流中字符对应的十六进制ASCII码,将十六进制ASCII码作为unicode编号;
将unicode编号转换为二进制数,按照从右向左的顺序,依次将二进制数中的数值填入预定二进制格式的空格中,得到utf-8码。
4.根据权利要求3所述的方法,其特征在于,在所述确定与所述文本流中字符对应的ASCII码之前,还包括:将所述文本流中的换行符统一替换为预定格式的换行符。
5.根据权利要求1所述的方法,其特征在于,所述利用预定加密算法对utf-8码进行加密,包括:
按照utf-8码的排序,提取三个utf-8码,将第一个utf-8码中的二进制数右移两位,得到第一加密位;
将第一个utf-8码中的二进制数与第一预定二进制数做按位与运算并左移四位,将第二个utf-8码中的二进制数右移四位,两者做或运算,得到第二加密位;
将第二个utf-8码中的二进制数与第二预定二进制数做按位与运算并左移两位,将第三个utf-8码中的二进制数右移六位,两者做或运算,得到第三加密位;
将第三个utf-8码中的二进制数与第三预定二进制数做按位与运算,得到第四加密位;
分别将第一加密位、第二加密位、第三加密位和第四加密位转换为ASCII码,查询与各ASCII码对应的字符并组合,得到四位加密字符串。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
当不存在第二个utf-8码和第三个utf-8码时,将第三加密位和第四加密位设置为第四预定二进制数;或
当不存在第三个utf-8码时,将第四加密位设置为第四预定二进制数。
7.根据权利要求6所述的方法,其特征在于,在所述基于加密后的字符串生成第二着色器文件之后,还包括:
响应于对所述第二着色器文件的加载操作,读取所述第二着色器文件中加密后的字符串;
按照预定解密算法对所述加密后的字符串进行解密,得到utf-8码;
对utf-8码进行解码,得到字符并组合为文本流,将所述文本流转换为二进制流,得到所述第一着色器文件。
8.根据权利要求7所述的方法,其特征在于,所述按照预定解密算法对所述加密后的字符串进行解密,得到utf-8码,包括:
按照加密字符的排列顺序,提取四位加密字符,查询与各加密字符对应的ASCII码并转换为二进制数,得到第一加密位、第二加密位、第三加密位和第四加密位;
将第一加密位中的二进制数左移两位,将第二加密位中的二进制数右移四位,两者做或运算,得到第一个utf-8码;
将第二加密位中的二进制数与第二预定二进制数做按位与运算并左移四位,将第三加密位中的二进制数右移两位,两者做或运算,得到第二个utf-8码;
将第三加密位中的二进制数与第一预定二进制数做按位与运算并左移六位,与第四加密位中的二进制数做或运算,得到第三个utf-8码。
9.根据权利要求8所述的方法,其特征在于,所述方法还包括:
判断第三加密位是否为第四预定二进制数,若判断结果为是,则将第二个utf-8码和第三个utf-8码设置为空;
若判断结果为不是,则判断第四加密位是否为第四预定二进制数,若判断结果为是,则将第三个utf-8码设置为空。
10.根据权利要求7所述的方法,其特征在于,所述对utf-8码进行解码,得到字符并组合为文本流,包括:
从左至右以四位二进制数为一组,将一utf-8码分为两组二进制数,分别将各组二进制数转换为十六进制,得到两个十六进制数;
从ASCII码表中查询与组合的两个十六进制数对应的字符;
按照utf-8码的排列顺序,对查询到的字符进行排列组合,得到文本流。
11.一种加密着色器文件的装置,其特征在于,包括:
转换模块,用于运行加密脚本,将待加密的第一着色器文件由二进制流转换为文本流;
编码模块,用于遍历所述文本流,将所述文本流中的字符编码为utf-8码;
加密模块,用于利用预定加密算法对utf-8码进行加密,基于加密后的字符串生成第二着色器文件。
12.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-10中任一所述的方法。
13.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-10中任一所述的方法。
CN202010724619.2A 2020-07-24 2020-07-24 一种加密着色器文件的方法和装置 Pending CN111931205A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010724619.2A CN111931205A (zh) 2020-07-24 2020-07-24 一种加密着色器文件的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010724619.2A CN111931205A (zh) 2020-07-24 2020-07-24 一种加密着色器文件的方法和装置

Publications (1)

Publication Number Publication Date
CN111931205A true CN111931205A (zh) 2020-11-13

Family

ID=73314573

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010724619.2A Pending CN111931205A (zh) 2020-07-24 2020-07-24 一种加密着色器文件的方法和装置

Country Status (1)

Country Link
CN (1) CN111931205A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112861154A (zh) * 2021-02-24 2021-05-28 中国科学院计算技术研究所 面向数据流架构的sha算法执行方法、存储介质、电子装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000072501A1 (de) * 1999-05-22 2000-11-30 Sc-Info+Inno Gmbh+Co. Elektronische übermittlung und beglaubigung von texten
CN103684760A (zh) * 2012-09-24 2014-03-26 腾讯科技(深圳)有限公司 通信的加密和解密的方法、装置及系统
CN109710899A (zh) * 2018-12-20 2019-05-03 山东省滨海公安局 存储介质内文件解密、取证方法和装置
CN110768785A (zh) * 2019-10-22 2020-02-07 宜人恒业科技发展(北京)有限公司 一种编、解码方法、相关装置及计算机设备
CN111228819A (zh) * 2019-12-30 2020-06-05 广东趣炫网络股份有限公司 一种保护Shader的方法、装置和设备

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2000072501A1 (de) * 1999-05-22 2000-11-30 Sc-Info+Inno Gmbh+Co. Elektronische übermittlung und beglaubigung von texten
CN103684760A (zh) * 2012-09-24 2014-03-26 腾讯科技(深圳)有限公司 通信的加密和解密的方法、装置及系统
WO2014044137A1 (zh) * 2012-09-24 2014-03-27 腾讯科技(深圳)有限公司 通信的加密和解密的方法、装置及系统
CN109710899A (zh) * 2018-12-20 2019-05-03 山东省滨海公安局 存储介质内文件解密、取证方法和装置
CN110768785A (zh) * 2019-10-22 2020-02-07 宜人恒业科技发展(北京)有限公司 一种编、解码方法、相关装置及计算机设备
CN111228819A (zh) * 2019-12-30 2020-06-05 广东趣炫网络股份有限公司 一种保护Shader的方法、装置和设备

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
2018 XLIV LATIN AMERICAN COMPUTER CONFERENCE (CLEI): "2018 XLIV Latin American Computer Conference (CLEI)", 2018 XLIV LATIN AMERICAN COMPUTER CONFERENCE (CLEI), 31 December 2018 (2018-12-31) *
杨智, 王凤琴, 王丽琴: "在VB6.0中实现base64编码/解码", 计算机应用, no. 09, 28 September 2000 (2000-09-28) *
罗江华;: "基于MD5与Base64的混合加密算法", 计算机应用, no. 1, 10 July 2012 (2012-07-10) *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112861154A (zh) * 2021-02-24 2021-05-28 中国科学院计算技术研究所 面向数据流架构的sha算法执行方法、存储介质、电子装置

Similar Documents

Publication Publication Date Title
CN103684760B (zh) 通信的加密和解密的方法、装置及系统
US10785277B2 (en) Methods and devices for encoding and decoding binary data
CN110224999B (zh) 信息交互方法、装置及存储介质
CN107292197B (zh) 数据加密方法、解密方法、加密装置和解密装置
CN107222759A (zh) 媒体文件加解密的方法、系统、设备和介质
CN113032818B (zh) 任务加密方法、装置、电子设备和计算机可读介质
CN113852822A (zh) 一种基于哈夫曼编码的加密域图像隐写方法及系统
CN111242259B (zh) 一种智能防伪码的编码和解码方法及系统
CN111191255A (zh) 信息加密处理的方法、服务器、终端、设备以及存储介质
CN110995391A (zh) 隔离网络中数据的传输方法、服务端及终端
CN114051006A (zh) 数据发送方法、装置、计算机设备以及存储介质
CN113434852A (zh) 密码处理方法、密码验证方法及装置、介质及电子设备
CN111931205A (zh) 一种加密着色器文件的方法和装置
US8077868B2 (en) Mechanism for transport-safe codings for cryptographic use
CN112399027B (zh) 图片加解密方法及装置、存储介质及电子设备
CN117834186A (zh) 一种数据加密传输方法和系统
CN116756758A (zh) 一种数据加密解密方法、装置、计算机设备、存储介质
CN106161021B (zh) 隐私数据发送方法及装置、隐私数据接收方法及装置
US8958554B2 (en) Unicode-compatible stream cipher
CN115550030A (zh) 数据加密方法、装置、存储介质及电子设备
CN113486379A (zh) 信息的加密方法、装置、介质及电子设备
CN114626968A (zh) 水印嵌入方法、水印提取方法和装置
CN111064560B (zh) 数据加密传输方法及装置、终端、数据加密传输系统
CN113283215B (zh) 一种基于utf-32编码的数据混淆方法及装置
CN112749353A (zh) 网页图标的处理方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination