CN115993955B - 对称密码算法的源代码生成和测试方法及系统 - Google Patents
对称密码算法的源代码生成和测试方法及系统 Download PDFInfo
- Publication number
- CN115993955B CN115993955B CN202310286291.4A CN202310286291A CN115993955B CN 115993955 B CN115993955 B CN 115993955B CN 202310286291 A CN202310286291 A CN 202310286291A CN 115993955 B CN115993955 B CN 115993955B
- Authority
- CN
- China
- Prior art keywords
- algorithm
- linked list
- source code
- symmetric cryptographic
- character string
- 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.)
- Active
Links
Images
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及源代码生成和测试技术领域,本发明公开了对称密码算法的源代码生成和测试方法及系统,其中,所述方法包括:获取对称密码算法的描述文本内容,将对称密码算法的描述文本内容存储到文本缓冲区中;将文本缓冲区中对称密码算法的描述文本内容进行预处理;基于预处理后的数据,生成对称密码算法的源代码;对对称密码算法的源代码进行性能测试,生成测试报告。本发明通过将对称密码算法描述文本转换为密码组件,进一步转换为C语言源代码,帮助密码设计者生成高质量软件代码,并对算法正确性和软件性能进行测试,给出算法速度指标,提高对称密码算法源代码设计效率。
Description
技术领域
本发明涉及源代码生成和测试技术领域,特别是涉及对称密码算法的源代码生成和测试方法及系统。
背景技术
本部分的陈述仅仅是提到了与本发明相关的背景技术,并不必然构成现有技术。
软件性能是对称密码的重要评价标准,但是密码设计者通常更关注安全性而忽略软件性能,导致基于算法原理手动编写的源代码效率较差,无法客观评价密码算法的软件性能。
发明内容
为了解决现有技术的不足,本发明提供了对称密码算法的源代码生成和测试方法及系统,本发明通过将对称密码算法描述文本转换为密码组件,进一步转换为C语言源代码,帮助密码设计者生成高质量软件代码,并对算法正确性和软件性能进行测试,给出算法速度指标,提高对称密码算法源代码设计效率。
第一方面,本发明提供了对称密码算法的源代码生成和测试方法;
对称密码算法的源代码生成和测试方法,包括:
获取对称密码算法的描述文本内容,将对称密码算法的描述文本内容存储到文本缓冲区中;
将文本缓冲区中对称密码算法的描述文本内容进行预处理;
基于预处理后的数据,生成对称密码算法的源代码;
对对称密码算法的源代码进行性能测试,生成测试报告。
第二方面,本发明提供了对称密码算法的源代码生成和测试系统;
对称密码算法的源代码生成和测试系统,包括:
获取模块,其被配置为:获取对称密码算法的描述文本内容,将对称密码算法的描述文本内容存储到文本缓冲区中;
预处理模块,其被配置为:将文本缓冲区中对称密码算法的描述文本内容进行预处理;
源代码生成模块,其被配置为:基于预处理后的数据,生成对称密码算法的源代码;
测试报告生成模块,其被配置为:对对称密码算法的源代码进行性能测试,生成测试报告。
与现有技术相比,本发明的有益效果是:
本发明通过将对称密码算法描述文本转换为密码组件,进一步转换为C语言源代码,帮助密码设计者生成高质量软件代码,并对算法正确性和软件性能进行测试,给出算法速度指标,提高密码算法设计效率。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为实施例一的方法流程图。
具体实施方式
应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
本实施例所有数据的获取都在符合法律法规和用户同意的基础上,对数据的合法应用。
实施例一
本实施例提供了对称密码算法的源代码生成和测试方法;
如图1所示,对称密码算法的源代码生成和测试方法,包括:
S101:获取对称密码算法的描述文本内容,将对称密码算法的描述文本内容存储到文本缓冲区中;
S102:将文本缓冲区中对称密码算法的描述文本内容进行预处理;
S103:基于预处理后的数据,生成对称密码算法的源代码;
S104:对对称密码算法的源代码进行性能测试,生成测试报告。
进一步地,所述S101:获取对称密码算法的描述文本内容,采用键盘输入的方式获取或采用触摸屏输入的方式获取。
应理解地,网络安全通信中要用到两类密码算法,一类是对称密码算法,另一类是非对称密码算法。对称密码算法有时又叫传统密码算法、秘密密钥算法或单密钥算法,非对称密码算法也叫公开密钥密码算法或双密钥算法。对称密码算法的加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数对称算法中,加密解密密钥是相同的。
进一步地,所述对称密码算法的描述文本内容,包括:
用于验证算法正确性的参考明文、参考密文、参考主密钥、参考调整参数、对称密码算法用到的常数参数、加密轮密钥扩展函数伪代码、解密轮密钥扩展函数、加密调整函数伪代码、解密调整函数伪代码、伪代码、加密过程伪代码和解密过程伪代码。
进一步地,所述S102:将文本缓冲区中对称密码算法的描述文本内容进行预处理,具体包括:
S102-1:创建算法描述链表、测试向量链表、第一参数链表、第二参数链表以及源代码链表;
S102-2:对文本缓冲区中对称密码算法描述文本的字符串进行格式化处理;所述格式化处理,包括:删除注释和删除空白字符;
S102-3:将格式化处理后的文本缓冲区的内容,分割为若干个字符串,基于分割得到的若干个字符串,对算法描述链表进行更新;
S102-4:对算法描述链表的小节信息进行处理;每个小节信息,是指,从开始字符串到结束字符串之间的所有字符串;所述开始字符串和结束字符串均为指定值;每个小节信息,包括伪代码或参数定义;
S102-5:对算法描述链表中的各个节点,标记子块、提取并替换变量名、标记节点类型;
S102-6:对算法描述链表的各个节点中的算法描述文本,进行语法错误检查。
进一步地,算法描述链表StringList,包括:若干个链表节点;节点与节点之间通过前一个节点的指针和后一个节点的指针进行连接;每个链表节点的属性,包括:算法描述字符串、待处理字符串、行号、块级别、块序号、小节信息、节点的有效或无效状态、组件类型、组件名称、参数信息表、循环变量名称、循环初始值、循环步长、循环结束值、块结束节点、前一个节点和后一个节点;
进一步地,测试向量链表kwlist,包括:若干个链表节点;每个链表节点的属性,包括:参数名称、参数元素数量、参数元素尺寸、参数数组和参数类型;
进一步地,第一参数链表Prlist,包括:若干个链表节点;每个链表节点的属性,包括:参数名称、参数元素数量、参数元素尺寸、参数数组、参数类型和小节编号;所述小节是由一组伪代码或参数定义构成, 由设定的开始字符串和结束字符串表明每个小节的开始和终止位置;根据小节编号,得知小节的来源;
进一步地,第二参数链表Varlist,包括:若干个链表节点;每个链表节点的属性,包括:参数名称、参数处理名称、参数类型、参数尺寸和参数值;参数处理名称,是指,在将对称算法描述文本转化为源代码的过程中,将参数名称替换为指定字符串,所述指定字符串为参数处理名称;
进一步地,源代码链表STR_List,包括:若干个链表节点;每个链表节点的属性,包括:代码字符串和小节编号。
进一步地,所述S102-2:对文本缓冲区中对称密码算法描述文本的字符串进行格式化处理,具体包括:
遍历文本缓冲区,将回车符统一替换为换行符;同时,删除所有行尾的空字符和注释;
其中,删除注释,是指,删除多行注释开始字符串与多行注释结束字符串之间的文本;其中,所述多行注释开始字符串与多行注释结束字符串均采用三个连续的单引号来表示;
其中,删除空白字符,是指,删除空格或跳格。
示例性地,所述删除多行注释,对算法描述链表StringList,从一个节点查找算法描述字符串中连续三个单引号’’’(ascii码值 39);如没有找到,转到后一个节点;如找到,设置多行注释开始节点linea 为当前节点,多行注释开始列号posa为第3个单引号位置,多行注释小节sec为当前节点的小节,从当前节点算法描述字符串第3个单引号后续开始反向查找连续的三个’’’,如找到删除算法描述字符串中多行注释开始字符串和多行注释结束字符串之间的内容;如没有,则从下一个节点的字符串查找多行注释结束字符串,如到小节结束没有找到,报语法错误,退出;如找到,删除linea节点算法描述字符串中多行注释开始字符串开始的所有内容;将linea后一节点到当前节点前一个节点状态设置为无效,删除当前节点算法描述字符串中多行注释结束字符串前所有内容。继续处理当前节点后一个节点直到StringList尾部。
示例性地,所述删除空白字符,是指:从算法描述链表StringList 从一个节点始,顺序处理各有效节点,删除各节点中的算法描述字符串中的空格、跳格等空白字符;如处理完成的算法描述字符串为空字符串设置节点状态为无效。
示例性地,所述S102-2:对文本缓冲区中对称密码算法描述文本的字符串进行格式化处理,具体包括:
遍历文本缓冲区,将回车符(ascii码为13)+换行符(ascii码为10) 替换为换行符,如果替换数量不为零,再次遍历;遍历文本缓冲区,将回车符替换为换行符;去除所有的行尾空字符和注释,注释以固定字符’#’(ascii码为35)开始。
进一步地,S102-3:将格式化处理后的文本缓冲区的内容,分割为若干个字符串,基于分割得到的若干个字符串,对算法描述链表进行更新,具体包括:
S102-31:将换行符作为分隔符,将文本缓冲区的内容分割为若干个字符串;
S102-32:对所有字符串按照从1到N的顺序进行编号;N为正整数;N的取值大于1;
S102-33:在算法描述链表中新增N个节点,将每个新增节点的算法描述字符串,按照编号顺序设置为对应的分割后的字符串。
示例性地,S102-3:将格式化处理后的文本缓冲区的内容,分割为若干个字符串,基于分割得到的若干个字符串,对算法描述链表进行更新,具体包括:
将文本缓冲区内容以换行符为分割符进行分割为多个字符串,从0开始按顺序编号,设总行数为N;
新增N个节点到算法描述链表StringList,每个新增节点的算法描述字符串设置为分割后的字符串,行号设置为字符串序号,状态设置为0。
进一步地,所述S102-4:对算法描述链表的小节信息进行处理,具体包括:
读取算法描述链表中节点的小节信息:找到算法描述链表中算法描述字符串与指定开始字符串相同的节点,然后从被找到节点的后续节点中,找到算法描述字符串与指定结束字符串相同的节点,将这两个节点之间的节点所对应的小节信息设置为开始字符串对应的小节信息;
对小节信息进行解析,并将解析结果存储到测试向量链表;
设置算法描述链表的小节属性为算法测试参数编号。
示例性地,所述S102-4:对算法描述链表的小节信息进行处理,具体包括:
读取使用设定字符串标识开始和结束位置的小节:
从算法描述链表StringList头部开始找到字符串与指定开始字符串相同的节点;从算法描述链表StringList头部开始找到字符串与指定结束字符串相同的节点,开始字符串对应节点与结束字符串对应节点之间所有节点的内容被称为小节信息;
设定“SETTINGS”作为算法测试参数的开始字符串, 将算法描述链表中算法描述字符串为“SETTINGS”的节点的小节信息设置为算法测试参数, 状态设置为无效;
设定“ENDSETTINGS”作为算法测试参数的结束字符串, 将算法描述链表中算法描述字符串为ENDSETTINGS”的节点的小节信息设置为算法测试参数, 状态设置为无效;
将两个节点之间的小节信息设置为算法测试参数;所述两个节点,是指算法描述链表中算法描述字符串为“SETTINGS”的节点和算法描述链表中算法描述字符串为“ENDSETTINGS”的节点;
算法测试参数小节内存储有:参考明文、参考密文、参考主密钥和调整参数,解析并存储到测试向量链表kwlist,设置算法描述链表StringList的小节属性为算法测试参数。
示例性地,算法参数小节的处理方法与算法测试参数小节的处理流程类似:
“PARAMETERS”、“ENDPARAMETERS” 算法参数,如常数、S盒等,解析并存储到参数链表Prlist,各Prlist节点的小节信息属性设置为算法参数;设置 StringList节点小节属性为算法参数;
即从算法描述链表StringList头部开始找到字符串与目标字符串相同的节点。
“PARAMETERS”算法测试参数开始字符串, 将当前节点的小节信息设置为算法测试参数, 状态设置为无效;
“ENDPARAMETERS”算法测试参数结束字符串, 将当前节点的小节信息设置为算法测试参数, 状态设置为无效;
将两个节点之间的节点小节信息设置为算法测试参数;
该小节内存储包括常数、S盒等, 解析并存储到参数链表Prlist,设置算法描述链表StringList的小节属性为算法参数。
以下小节为对称密码常用函数小节,小节可为空;
以“SWENC”为开始字符串,以“ENDSWENC”为结束字符串的加密函数,设置StringList节点小节属性为加密函数;
以“SWDEC” 为开始字符串,以“ENDSWDEC”为结束字符串的解密函数,设置StringList节点小节属性为解密函数;
以“SWKEYSCHENC” 为开始字符串,以“ENDSWKEYSCHENC”为结束字符串的加密轮密钥扩展函数,设置StringList节点小节属性为加密轮密钥扩展函数;
以“SWKEYSCHDEC” 为开始字符串,以“ENDSWKEYSCHDEC”为结束字符串的解密轮密钥扩展函数,设置StringList节点小节属性为解密轮密钥扩展函数;
以“SWTWEAKENC” 为开始字符串,以“ENDSWTWEAKENC”为结束字符串的加密调整函数,设置StringList 节点小节属性为加密调柄扩展函数;
以“SWTWEAKDEC” 为开始字符串,以“ENDSWTWEAKDEC”为结束字符串的解密调整函数,设置StringList节点小节属性为解密调柄扩展函数。
进一步地,所述S102-5:对算法描述链表中的各个节点,标记子块、提取并替换变量名、标记节点类型;
S102-51:标记子块,是指,将分界符中间的伪代码标记为同一个代码子块;
S102-52:提取并替换变量名,是指为每一个变量名生成一个变量处理名称;
S102-53:标记节点类型,用于标记算法描述链表节点的类型,所述节点的类型,包括:循环组件、逻辑判断组件和标准组件。
进一步地,所述标记子块,具体包括:
S102-511:找到所有算法描述字符串包含左大括号(ascii码值 123)和右大括号(ascii码值 125)的节点;
S102-512:如果当前节点只包含不多于1个括号,则处理下一个节点;
S102-513:如果大括号左边非空,右边为空,则将当前节点的文本删除大括号,在当前节点后插入一个算法描述字符串为相同大括号的节点,设置节点的小节信息、行号、状态与当前节点一致 ;
S102-514:如果大括号左边为空,左边非空,则在当前节点后插入一个节点,节点中的算法描述字符串为当前节点大括号后的内容,设置节点的小节信息、行号、状态与当前节点一致,当前节点算法描述字符串为大括号;
S102-515:如果大括号左边非空,右边非空,当前节点算法描述字符串为大括号左边文本,则在当前节点后顺序插入一个算法描述字符串只包含相同大括号的节点和一个算法描述字符串为大括号后内容的节点,这个两个节点的设置节点的小节信息,行号、状态与当前节点一致;当前节点处理完毕后处理当前节点后一个节点;
S102-516:将算法描述链表StringList第一个节点的代码块标号设置为0, 代码块级别设置为0,顺序检查各状态不为无效的节点(有效节点)算法描述字符串,查找‘{’及对应的’}’, 将两个节点和两个节点中间节点的代码块级别设置为上一个节点的级别加1,各节点标号从0开始依次增加,设置算法描述链表中算法描述字符串为左大括弧的节点的块结束节点为算法描述链表中算法描述字符串为右大括弧的节点;所述两个节点,是指算法描述链表中算法描述字符串为左大括弧的节点和算法描述链表中算法描述字符串为右大括弧的节点。
示例性地,所述提取并替换变量名,是指为每一个变量名生成一个变量处理名称,从算法描述链表StringList第一个节点开始,顺序检查各有效节点的算法描述字符串,如为循环体或者赋值语句,则提取其中的参数,按参数名称长度从长到短排序并从0开始顺序编号,将所提取的参数名称依次插入Vrlist链表,Vrlist节点参数名称为参数名称,参数处理名称为#~#%03X~# 格式的字符串,其中%03X为数据长度为3的16进制表示的编号。
进一步地,所述标记节点类型,从算法描述链表StringList第一个节点开始,顺序检查各有效节点:如果小节信息属于对称密码函数;
S102-531:如果当前节点的算法描述字符串以 “for(”字符串开始,则设置当前节点的组件类型为循环组件,提取其循环变量的名称、初始值、步长和结束值并保存到节点的循环变量名称、循环初始值、循环步长和循环结束值;
S102-532:如果当前节点的算法描述字符串以“if(”字符串开始,则设置当前节点的组件类型为逻辑判断开始组件;
S102-533:如果当前节点的算法描述字符串以“elif(”字符串开始,则设置当前节点的组件类型为逻辑判断分支组件;
S102-534:如果当前节点的算法描述字符串以“else”字符串开始,则设置当前节点的组件类型为逻辑判断结束组件;
S102-535:如果当前节点算法描述字符串为”{”,则当前节点组件类型为块开始组件;
S102-536:如果当前节点算法描述字符串为”}”,则当前节点组件类型为块结束组件;否则设置节点的组件类型为标准组件。
进一步地,所述S102-6:对语法错误进行检查,具体包括:
从算法描述链表StringList第一个节点开始,顺序检查各有效节点,如果组件类型为逻辑判断开始组件,且与其后续同小节节点组件类型满足如下形式中的任一形式:
(1)逻辑判断开始组件-组件块;横线“-”表示前后组件的连接关系。
(2)逻辑判断开始组件-组件块-逻辑判断结束组件-组件块;
(3)逻辑判断开始组件-组件块-逻辑判断分支组件-组件块;
(4)逻辑判断开始组件-组件块-逻辑判断分支组件-组件块-逻辑判断结束组 -组件块;
则判定为条件判断逻辑合法,继续查找后一个节点;否则报语法错误,退出。
所述组件块,为块开始组件到块结束节点之间的所有组件或一个标准组件。
所述标准组件,是指,节点的类型为标准组件,或者是指非循环组件以及非逻辑判断组件。
根据语法规则检查算法描述字符串是否存在语法错误,如有错误,报错退出,组件格式为:组件名(参数1, 参数2,...,参数n),将节点的组件名称设置为组件名, 将算法描述字符串删除开始的组件名( 和字符串末尾的)后保存到算法描述字符串。所有组件均有相对应的语法格式规则。
进一步地,所述S103:基于预处理后的数据,生成对称密码算法的源代码,具体包括:
S103-1:生成全局变量定义源代码,生成函数源代码;
S103-2:生成正确性测试源代码;
S103-3:生成速度测试源代码。
进一步地,所述S103-1:生成全局变量定义源代码,具体包括:
S103-1a1:创建一个空的源码字符串;
S103-1a2:从测试向量链表kwlist的第一个节点开始依次提取参考明文信息、参考密文信息、主密钥信息、调整参数信息,将提取的参数生成c语言格式的参数定义语句,添加到源码字符串后面;
S103-1a3:从第一参数链表Prlist中提取小节属性为算法参数的参数,将提取的参数生成c语言格式的全局参数定义语句,添加到源码字符串后面。
进一步地,所述生成函数源代码,具体包括:
S103-1b1:创建一个空的函数源码字符串;
S103-1b2:根据对称密码算法的函数小节属性生成函数名称,将函数名称追加函数源码字符串;添加“(”到函数源码字符串的后面;从第二参数链表varlist第一个节点开始顺序提取小节属性为所述函数小节属性,且类型为输出变量的变量,生成c语言格式的形参声明语句,将形参声明语句追加到函数源码字符串;
对称密码算法的函数,包括:加密函数、解密函数、加密轮密钥扩展函数、解密轮密钥扩展函数、加密调柄扩展函数、解密调柄扩展函数;
S103-1b3:从varlist 链表第一个节点开始,顺序提取小节属性为所述函数小节属性,且类型为输入变量的变量,生成c语言格式的形参声明语句,追加到函数源码字符串;追加“)”和“{”到函数源码字符串;
S103-1b4:从Prlist链表第一个节点开始,顺序提取小节属性为所述函数小节属性的变量,将提取的参数生成c语言格式的全局参数声明语句,追加到函数源码字符串;
S103-1b5:设置函数组件数量为0;
S103-1b6:从源码链表STR_List第一个节点开始顺序提取小节信息为本小节的节点,提取代码字符串追加到函数源码字符串,函数组件数量加1;
S103-1b7:追加“}”到函数源码字符串;
S103-1b8:如果函数组件数量>0, 则将函数源码字符串追加到源码字符串;
S103-1b9:保存函数组件数量。
示例性地,从算法描述链表StringList第一个节点开始,顺序检查各有效节点,如小节信息属于对称密码常用函数小节;所述对称密码常用函数,包括:加密函数、解密函数、加密轮密钥扩展函数、解密轮密钥扩展函数、加密调柄扩展函数、解密调柄扩展函数;
分析StringList节点,对于循环组件、逻辑判断开始组件和标准组件三类节点进行处理:
对于循环组件类节点,提取节点的循环变量名称,从Vrlist中查找其参数处理名称,设置Vrlist节点的参数值为循环变量初始值,按照循环变量步长循环到循环变量结束值,处理其组件块。每次循环后更新Vrlist节点的参数值为当前值+循环变量步长。
对于逻辑判断开始组件类节点,用Vrlist中所有节点的参数值替换其算法描述字符串中对应的参数处理名称, 然后处理其组件块。
对于标准组件类节点,将算法描述字符串以逗号分割为多个参数字符串,对每个参数字符串执行如下解析操作:创建一个空临时字符串,将参数字符串以如下5种字符进行分割(下划线(ASCII码95), 左小括号,右小括号,左大括号,右大括号)得到多个子串,将每个子串与Vrlist中所有的节点参数名称和参数处理名称进行比对,如找到一致的Vrlist节点,将Vrlist该节点的参数处理名称追加到临时字符串,否则将该字串追加到临时字符串;所有子串处理完成后得到组件参数名称,按照组件规则获取参数类型,在Prlist链表中查找同小节信息,同名称的节点,如没有找到,在Prlist中追加一个节点,Prlist节点参数名称为组件参数名称,小节为StringList节点小节信息,Prlist节点参数类型为参数类型。所有本组件参数处理完毕后,调用预先定义的组件转换函数生成组件代码字符串,追加一个STR_List节点,其代码字符串为组件代码字符串,小节属性为StringList节点小节信息。
进一步地,所述S103-2:生成正确性测试源代码,具体包括:
S103-21:追加字符串“int main(void) {”到源码字符串;
追加输出密文数组和输出明文数组声明到源码字符串;
如果加密轮函数组件数量>0,则追加加密用的轮密钥数组声明到源码字符串;所述加密轮密钥数组,是指加密用的轮密钥的数组;
如果解密轮函数组件数量>0,则追加解密用的轮密钥数组声明到源码字符串;所述解密轮密钥数组,为解密用的轮密钥数组;
如果加密调整函数组件数量>0,则追加加密用的调柄轮参数数组声明到源码字符串;
如果解密调整函数组件数量>0,则追加解密的调柄轮参数数组声明到源码字符串;
S103-22:如果加密轮函数组件数量>0,则追加加密轮密钥扩展函数字符串到源码字符串,主密钥作为输入,加密轮密钥作为输出;
S103-23:如果加密调整函数组件数量>0,则追加加密调柄扩展函数字符串到源码字符串,其中调整参数作为输入,加密调整轮参数作为输出;加密用的调柄扩展函数,用于将调柄数组生成每轮加密用数组;
S103-24:如果加密函数组件数量>0,则追加加密函数到源码字符串,其中输出密文作为输出;参考明文、加密轮密钥(如加密轮函数组件数量>0)加密调整轮参数(如加密调整函数组件数量>0)作为输入参数;同时,追加输出密文和参考密文的对比代码到源码字符串;
S103-25:如果解密轮函数组件数量>0, 则追加解密轮密钥扩展函数到源码字符串,其中主密钥作为输入,解密轮密钥作为输出;
S103-26:如果解密调整函数组件数量>0, 则追加解调柄扩展函数到源码字符串,其中调整参数作为输入,解密调整轮参数作为输出;解调柄扩展函数,用于将调柄数组生成每轮解密用数组;
S103-27:如果解密函数组件数量>0, 则追加解密函数到源码字符串,其中输出明文作为输出;参考密文、解密轮密钥(如解密轮函数组件数量>0)、解密调柄轮参数(如加密调整函数组件数量>0)作为输入参数;同时,追加输出明文和参考明文的对比代码到源码字符串;最后,得到正确性测试源代码。
进一步地,所述S103-3:生成速度测试源代码,具体包括:
S103-31:追加创建明文缓冲区代码到源码字符串;
S103-32:追加创建密文缓冲区代码到源码字符串;
S103-33:追加计时函数T0、短数据包加密代码、计时函数T1、速度计算函数、速度输出函数到源码字符串;
S103-34:追加计时函数、短数据包解密代码、速度计算函数、速度输出函数到源码字符串;
S103-35:追加计时函数、长数据包加密代码、速度计算函数、速度输出函数到源码字符串;
S103-36:追加计时函数、长数据包解密代码、速度计算函数、速度输出函数到源码字符串;
S103-37:追加明文缓冲区、释放代码到源码字符串;
S103-38:追加密文缓冲区、释放代码到源码字符串;
S103-39:追加 “return 0;}” 到源码字符串。
进一步地,所述S104:对对称密码算法的源代码进行性能测试,生成测试报告,具体包括:
S104-1:对全局变量定义源代码、函数源代码、正确性测试源代码以及速度测试源代码按顺序合并并保存为完整的源代码文件,利用C语言编译器对源代码文件进行编译,生成测试程序;
S104-2:将测试程序发送到测试服务器,测试服务器执行测试程序,得到测试程序返回码和测试程序的输出结果;测试程序返回码,用于表示程序测试是否通过,如果通过则返回通过,如果未通过则返回错误码;
S104-3:将测试程序返回码更新到状态文件中,将测试程序的输出结果输出到测试报告中。
实施例二
本实施例提供了对称密码算法的源代码生成和测试系统;
对称密码算法的源代码生成和测试系统,包括:
获取模块,其被配置为:获取对称密码算法的描述文本内容,将对称密码算法的描述文本内容存储到文本缓冲区中;
预处理模块,其被配置为:将文本缓冲区中对称密码算法的描述文本内容进行预处理;
源代码生成模块,其被配置为:基于预处理后的数据,生成对称密码算法的源代码;
测试报告生成模块,其被配置为:对对称密码算法的源代码进行性能测试,生成测试报告。
此处需要说明的是,上述获取模块、预处理模块、源代码生成模块和测试报告生成模块对应于实施例一中的步骤S101至S104,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为系统的一部分可以在诸如一组计算机可执行指令的计算机系统中执行。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.对称密码算法的源代码生成和测试方法,其特征是,包括:
获取对称密码算法的描述文本内容,将对称密码算法的描述文本内容存储到文本缓冲区中;
将文本缓冲区中对称密码算法的描述文本内容进行预处理;
所述将文本缓冲区中对称密码算法的描述文本内容进行预处理,具体包括:
创建算法描述链表、测试向量链表、第一参数链表、第二参数链表以及源代码链表;
对文本缓冲区中对称密码算法描述文本的字符串进行格式化处理;所述格式化处理,包括:删除注释和删除空白字符;
将格式化处理后的文本缓冲区的内容,分割为若干个字符串,基于分割得到的若干个字符串,对算法描述链表进行更新;
对算法描述链表的小节信息进行处理;每个小节信息,是指,从开始字符串到结束字符串之间的所有字符串;所述开始字符串和结束字符串均为指定值;每个小节信息,包括伪代码或参数定义;
对算法描述链表中的各个节点,标记子块、提取并替换变量名、标记节点类型;
对算法描述链表的各个节点中的算法描述文本,进行语法错误检查;
基于预处理后的数据,生成对称密码算法的源代码;
对对称密码算法的源代码进行性能测试,生成测试报告。
2.如权利要求1所述的对称密码算法的源代码生成和测试方法,其特征是,所述对文本缓冲区中对称密码算法描述文本的字符串进行格式化处理,具体包括:
遍历文本缓冲区,将回车符统一替换为换行符;同时,删除所有行尾的空字符和注释;
其中,删除注释,是指,删除多行注释开始字符串与多行注释结束字符串之间的文本;其中,所述多行注释开始字符串与多行注释结束字符串均采用三个连续的单引号来表示;
其中,删除空白字符,是指,删除空格或跳格。
3.如权利要求1所述的对称密码算法的源代码生成和测试方法,其特征是,将格式化处理后的文本缓冲区的内容,分割为若干个字符串,基于分割得到的若干个字符串,对算法描述链表进行更新,具体包括:
将换行符作为分隔符,将文本缓冲区的内容分割为若干个字符串;
对所有字符串按照从1到N的顺序进行编号;N为正整数;N的取值大于1;
在算法描述链表中新增N个节点,将每个新增节点的算法描述字符串,按照编号顺序设置为对应的分割后的字符串。
4.如权利要求1所述的对称密码算法的源代码生成和测试方法,其特征是,对算法描述链表的小节信息进行处理,具体包括:
读取算法描述链表中节点的小节信息:找到算法描述链表中算法描述字符串与指定开始字符串相同的节点,然后从被找到节点的后续节点中,找到算法描述字符串与指定结束字符串相同的节点,将这两个节点之间的节点所对应的小节信息设置为开始字符串对应的小节信息;
对小节信息进行解析,并将解析结果存储到测试向量链表;
设置算法描述链表的小节属性为算法测试参数编号。
5.如权利要求1所述的对称密码算法的源代码生成和测试方法,其特征是,对算法描述链表中的各个节点,标记子块、提取并替换变量名、标记节点类型;
标记子块,是指,将分界符中间的伪代码标记为同一个代码子块;
提取并替换变量名,是指为每一个变量名生成一个变量处理名称;
标记节点类型,用于标记算法描述链表节点的类型,所述节点的类型,包括:循环组件、逻辑判断组件和标准组件。
6.如权利要求1所述的对称密码算法的源代码生成和测试方法,其特征是,所述进行语法错误检查,具体包括:
从算法描述链表第一个节点开始,顺序检查各有效节点,如果组件类型为逻辑判断开始组件,且与其后续同小节节点组件类型满足如下形式中的任一形式:
逻辑判断开始组件-组件块;横线“-”表示前后组件的连接关系;
逻辑判断开始组件-组件块-逻辑判断结束组件-组件块;
逻辑判断开始组件-组件块-逻辑判断分支组件-组件块;
逻辑判断开始组件-组件块-逻辑判断分支组件-组件块-逻辑判断结束组 -组件块;
则判定为条件判断逻辑合法,继续查找后一个节点;否则报语法错误,退出。
7.如权利要求1所述的对称密码算法的源代码生成和测试方法,其特征是,所述基于预处理后的数据,生成对称密码算法的源代码,具体包括:
生成全局变量定义源代码,生成函数源代码;
生成正确性测试源代码;
生成速度测试源代码;
生成全局变量定义源代码,具体包括:
创建一个空的源码字符串;
从测试向量链表的第一个节点开始依次提取参考明文信息、参考密文信息、主密钥信息、调整参数信息,将提取的参数生成参数定义语句,添加到源码字符串后面;
从第一参数链表中提取小节属性为算法参数的参数,将提取的参数生成全局参数定义语句,添加到源码字符串后面。
8.如权利要求1所述的对称密码算法的源代码生成和测试方法,其特征是,对对称密码算法的源代码进行性能测试,生成测试报告,具体包括:
对全局变量定义源代码、函数源代码、正确性测试源代码以及速度测试源代码按顺序合并并保存为完整的源代码文件,对源代码文件进行编译,生成测试程序;
将测试程序发送到测试服务器,测试服务器执行测试程序,得到测试程序返回码和测试程序的输出结果;测试程序返回码,用于表示程序测试是否通过,如果通过则返回通过,如果未通过则返回错误码;
将测试程序返回码更新到状态文件中,将测试程序的输出结果输出到测试报告中。
9.对称密码算法的源代码生成和测试系统,其特征是,包括:
获取模块,其被配置为:获取对称密码算法的描述文本内容,将对称密码算法的描述文本内容存储到文本缓冲区中;
预处理模块,其被配置为:将文本缓冲区中对称密码算法的描述文本内容进行预处理;
所述将文本缓冲区中对称密码算法的描述文本内容进行预处理,具体包括:
创建算法描述链表、测试向量链表、第一参数链表、第二参数链表以及源代码链表;
对文本缓冲区中对称密码算法描述文本的字符串进行格式化处理;所述格式化处理,包括:删除注释和删除空白字符;
将格式化处理后的文本缓冲区的内容,分割为若干个字符串,基于分割得到的若干个字符串,对算法描述链表进行更新;
对算法描述链表的小节信息进行处理;每个小节信息,是指,从开始字符串到结束字符串之间的所有字符串;所述开始字符串和结束字符串均为指定值;每个小节信息,包括伪代码或参数定义;
对算法描述链表中的各个节点,标记子块、提取并替换变量名、标记节点类型;
对算法描述链表的各个节点中的算法描述文本,进行语法错误检查;
源代码生成模块,其被配置为:基于预处理后的数据,生成对称密码算法的源代码;
测试报告生成模块,其被配置为:对对称密码算法的源代码进行性能测试,生成测试报告。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310286291.4A CN115993955B (zh) | 2023-03-23 | 2023-03-23 | 对称密码算法的源代码生成和测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310286291.4A CN115993955B (zh) | 2023-03-23 | 2023-03-23 | 对称密码算法的源代码生成和测试方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115993955A CN115993955A (zh) | 2023-04-21 |
CN115993955B true CN115993955B (zh) | 2023-06-23 |
Family
ID=85995233
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310286291.4A Active CN115993955B (zh) | 2023-03-23 | 2023-03-23 | 对称密码算法的源代码生成和测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115993955B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177749A (zh) * | 2019-12-18 | 2020-05-19 | 深圳市金蝶天燕云计算股份有限公司 | 加密源代码文件处理方法、装置、计算机设备和存储介质 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002527814A (ja) * | 1998-10-13 | 2002-08-27 | コデイジェン テクノロジーズ コーポレイション | コンポーネント・ベース型ソース・コード・ジェネレータ |
WO2005082102A2 (en) * | 2004-02-26 | 2005-09-09 | Datapower Technology, Inc. | Method and apparatus of streaming data transformation using code generator and translator |
CN100489774C (zh) * | 2007-09-13 | 2009-05-20 | 上海交通大学 | 结构化的代码自动配置方法及装置 |
JP5751669B2 (ja) * | 2011-07-08 | 2015-07-22 | ルネサスエレクトロニクス株式会社 | 言語変換処理方法及び言語変換処理プログラム |
CN102707948B (zh) * | 2012-04-26 | 2014-11-26 | 华亚微电子(上海)有限公司 | 一种源代码生成方法 |
US9280322B2 (en) * | 2012-09-27 | 2016-03-08 | Intel Corporation | Generating source code |
US9940104B2 (en) * | 2013-06-11 | 2018-04-10 | Microsoft Technology Licensing, Llc. | Automatic source code generation |
CN105072130B (zh) * | 2015-08-26 | 2018-03-06 | 广州慧睿思通信息科技有限公司 | 一种asn.1解码器代码自动生成方法 |
CN106789058B (zh) * | 2016-12-09 | 2020-11-13 | 南京理工大学 | 一种代理重加密算法描述及解析方法 |
CN106919434B (zh) * | 2017-03-22 | 2021-02-12 | 恒生电子股份有限公司 | 一种代码生成方法及装置 |
US11532309B2 (en) * | 2020-05-04 | 2022-12-20 | Austin Cox | Techniques for converting natural speech to programming code |
EP4363965A1 (en) * | 2021-08-06 | 2024-05-08 | Siemens Aktiengesellschaft | Source code synthesis for domain specific languages from natural language text |
CN115509532A (zh) * | 2022-09-26 | 2022-12-23 | 重庆大学 | C语言结构体转protobuf文件及互相转换代码自动生成方法 |
CN115469860B (zh) * | 2022-10-28 | 2023-02-17 | 山东大学 | 基于指令集的需求到软件领域模型的自动生成方法及系统 |
-
2023
- 2023-03-23 CN CN202310286291.4A patent/CN115993955B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111177749A (zh) * | 2019-12-18 | 2020-05-19 | 深圳市金蝶天燕云计算股份有限公司 | 加密源代码文件处理方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115993955A (zh) | 2023-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Owens et al. | Regular-expression derivatives re-examined | |
CN109445834A (zh) | 基于抽象语法树的程序代码相似性快速比较方法 | |
CN114168622A (zh) | 一种基于领域特定语言的数据查询方法及装置 | |
CN105260223B (zh) | 一种scpi命令定义、解析、执行和测试的方法 | |
US20230418578A1 (en) | Systems and methods for detection of code clones | |
Solanki et al. | Comparative study of software clone detection techniques | |
CN115993955B (zh) | 对称密码算法的源代码生成和测试方法及系统 | |
CN113849781A (zh) | Go语言源代码混淆方法、系统、终端及存储介质 | |
Guo et al. | A novel vulnerable code clone detector based on context enhancement and patch validation | |
CN106649108A (zh) | 测试数据的生成方法及装置 | |
Urban | POSIX Lexing with Derivatives of Regular Expressions | |
CN113535461A (zh) | 一种基于配置文件的联锁下位机数据可视化校验方法 | |
Kilpeläinen et al. | SGML and XML document grammars and exceptions | |
Hellmann et al. | Towards an ontology for representing strings | |
JP2016051367A (ja) | データ解析装置、データ解析方法、および、プログラム。 | |
Kaur et al. | A Comprehensive Review of Code Clone Detection Techniques | |
Pons et al. | On The Exact Counting of Tree-Child Networks | |
CN116661794B (zh) | 一种硬件描述语言语义转换方法及装置 | |
CN112650680B (zh) | 基于抽象语法树的冗余变量和冗余方法的检测方法及系统 | |
CN117009319B (zh) | 基于大语言模型的数据库操作方法、系统及存储介质 | |
CN113220800B (zh) | 基于antlr的数据字段血缘分析方法及装置 | |
Wang et al. | A diversified feature extraction approach for program similarity analysis | |
Srikant et al. | Parallel parsing of programming languages | |
CN116719827A (zh) | 一种宽表更新方法、装置、设备及计算机可读存储介质 | |
CN117114003A (zh) | 一种基于Trie树的许可证识别方法、系统及介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |