一种基于AES的文件加密方法
文献发布时间:2024-04-29 00:47:01
技术领域
本发明涉及对称密钥算法和文件加密技术领域,特别涉及一种基于AES的文件加密方法。
背景技术
AES高级加密标准,是一种对称加密算法,算法对明文的加密和解密都使用同一个密钥,被广泛应用于各种网络安全和数据保护场景,如网络通信、文件加密等。AES加密算法的基本原理是将明文数据经过多轮加密操作,最终生成密文。加密过程主要包括字节替换、行移位、列混淆、轮密钥加四个步骤。但是,常规情况下AES仅能用于明文字符串的加密,不能用于文件加密的场景。
在尝试使用Java通过AES算法对文件加密过程中,先将文件转为字节数组,再对字节数组进行AES加密生成新的字节数组,保存输出为加密后的文件。在使用密钥对加密文件的字节数组解密,并生成解密文件后,会发现文件无法正常打开或查看。通过与源文件进行字节对比,发现文件的字节长度发生了改变,导致了源文件损坏。
发明内容
本发明目的是提供一种基于AES的文件加密方法,从设计填充长度的角度,解决上述技术问题。
具体技术方案是一种基于AES的文件加密方法,所述方法包括:
S1、加密前对原始文件的字节数组进行处理,先计算源文件的初始字节长度,并将int类型的长度转为byte数组的形式,并记录长度,
S2、对源文件的字节数组进行扩展,新建一个字节数组,长度为原数组长度+16m,m取整数,且1≤m≤4,扩展区域包括源文件长度字节,
S3、使用AES对新字节数组进行加密,获得加密后的字节数组,
S4、输出字节流到加密文件中,生成新文件。
优选地,步骤S1中,使用4n个byte记录源文件长度,1≤n≤4m,且n取整数。
优选地,步骤S2中,扩展区域位于原始文件字节前面。
优选地,新建字节数组的前4n字节保存源文件长度。
优选地,扩展区域后(16m-4n)字节填充0。
优选地,还包括解密过程:
S1、读取加密文件,处理为字节数组形式,
S2、直接使用AES解密对字节数组进行解密,生成新的字节数组,
S3、读取前4n字节,并转换为int类型,获取源文件字节长度,设为Len,
S4、新建一个字节数组,长度为上面获取到的原长度Len,
S5、从解密后的数组第16m字节开始,复制到新数组中,
S6、复制完成后,若新数组仍有空余位置,则进行补0操作,
S7、输出新的字节数组到文件中,生成解密文件。
优选地,步骤S1中,使用4个byte记录源文件长度;步骤S2中,新建字节数组的长度为原数组长度+16,扩展区域位于原始文件字节前面,且新建字节数组的前4字节保存源文件长度,扩展区域其余字节填充0。
优选地,还包括解密过程:
S1、读取加密文件,处理为字节数组形式,
S2、直接使用AES解密对字节数组进行解密,生成新的字节数组,
S3、读取前4字节,并转换为int类型,获取源文件字节长度,设为Len,
S4、新建一个字节数组,长度为上面获取到的原长度Len,
S5、从解密后的数组第16字节开始,复制到新数组中,
S6、复制完成后,若新数组仍有空余位置,则进行补0操作,
S7、输出新的字节数组到文件中,生成解密文件。
与现有技术相比,本发明有益效果如下:
1、通过对源文件的字节数组进行整块扩展,扩展区域在加密时长度不变,并在扩展区域中记录源文件的初始字节长度,以便于解密阶段的准确读取;
2、源文件的初始字节长度记录中,将int类型的长度转为byte数组的形式,保持数据处理环节中的一致性,
3、设计了仅添加16字节,利用前4字节记录源文件长度、其余位补0的具体方案,解决了加密过程中长度引起的文件损坏问题,
本申请对加密过程中的填充长度进行设计,弥补了AES算法在文件加密过程中由于对齐填充导致的加密后文件无法正常读取的问题,是一种轻量级的解决方案,提高了AES算法在文件加密场景中的适用性。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明中加密流程图,
图2是本发明中解密流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明作进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。
在本发明的描述中,需要说明的是,术语“内”、“外”、“左”、“右”是指示的方位或位置关系为基于附图所示的位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
结合图1理解,一种基于AES的文件加密方法,所述方法包括:
S1、加密前对原始文件的字节数组进行处理,先计算源文件的初始字节长度,并将int类型的长度转为byte数组的形式,并记录长度,
S2、对源文件的字节数组进行扩展,新建一个字节数组,长度为原数组长度+16m,m取整数,且1≤m≤4,扩展区域包括源文件长度字节,
S3、使用AES对新字节数组进行加密,获得加密后的字节数组,
S4、输出字节流到加密文件中,生成新文件。
工作原理:由于AES加密要求的BlockSize是16的整数倍,AES在对整块数据进行加密的过程中,长度不会发生变化。该方案对源文件的字节数组进行整块扩展,扩展区域在加密时长度不变;源文件的初始字节长度记录中,将int类型的长度转为byte数组的形式,保持数据处理环节中的一致性;并在扩展区域中记录源文件的初始字节长度,以便于解密阶段的准确读取。本申请对加密过程中的填充长度进行设计,弥补了AES算法在文件加密过程中由于对齐填充导致的加密后文件无法正常读取的问题,是一种轻量级的解决方案,提高了AES算法在文件加密场景中的适用性。
在一个实施例中,步骤S1中,使用4n个byte记录源文件长度,1≤n≤4m,且n取整数。在扩展区域中记录源文件的初始字节长度,以便于解密阶段的准确读取。m取整数,且1≤m≤4,m取值小,即扩展区域小,利于节约存储空间。
在一个实施例中,步骤S2中,扩展区域位于原始文件字节前面。参照图1理解,一条数据格式为扩展区域的字节+原始文件字节。对数据格式进行设计,便于统一加密的实施。
在一个实施例中,新建字节数组的前4n字节保存源文件长度。这里使用int类型保存源文件长度,int类型为4字节。
在一个实施例中,扩展区域后(16m-4n)字节填充0。参照图1理解,扩展区域的字节分为两部分,前边是源文件长度的记录字节,后边是补0部分,保持扩展区域以整块形式出现,在加密过程中,长度不发生变化。
在一个实施例中,结合图2理解,还包括解密过程:
S1、读取加密文件,处理为字节数组形式,
S2、直接使用AES解密对字节数组进行解密,生成新的字节数组,
S3、读取前4n字节,并转换为int类型,获取源文件字节长度,设为Len,
S4、新建一个字节数组,长度为上面获取到的原长度Len,
S5、从解密后的数组第16m字节开始,复制到新数组中,
S6、复制完成后,若新数组仍有空余位置,则进行补0操作,
S7、输出新的字节数组到文件中,生成解密文件。
在对称密钥算法中,在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。加密时,对原始文件的字节数组进行了前处理,解密时也要进行处理才行。
在一个实施例中,步骤S1中,使用4个byte记录源文件长度;步骤S2中,新建字节数组的长度为原数组长度+16,扩展区域位于原始文件字节前面,且新建字节数组的前4字节保存源文件长度,扩展区域其余字节填充0。在添加16字节的方案中,利用前4字节记录源文件长度、其余位补0的具体方案,解决了加密过程中长度引起的文件损坏问题。
在一个实施例中,还包括解密过程:
S1、读取加密文件,处理为字节数组形式,
S2、直接使用AES解密对字节数组进行解密,生成新的字节数组,
S3、读取前4字节,并转换为int类型,获取源文件字节长度,设为Len,
S4、新建一个字节数组,长度为上面获取到的原长度Len,
S5、从解密后的数组第16字节开始,复制到新数组中,
S6、复制完成后,若新数组仍有空余位置,则进行补0操作,
S7、输出新的字节数组到文件中,生成解密文件。
实施例:由于加解密后的文件字节数长度发生了变化,那么从长度入手进行分析。AES在进行加密时BlockSize是16,也就是说在使用AES加密前,会先对明文字节数进行填充,使长度变为块的整数倍,所以可以得出AES无法正常解密的原因是因为加密过程中填充长度导致。
一种基于AES的文件加密方法,结合图1理解,加密过程流程如下:
S01、加密前对原始文件的字节数组进行处理,先计算源文件的初始字节长度,并将int类型的长度转为byte数组的形式,使用4个byte进行记录,
S02、由于AES加密要求的BlockSize是16的整数倍,AES在对整块数据进行加密的过程中,长度不会发生变化,即如果原始长度为16字节,那么加密后的长度仍为16字节,因此对源文件的字节数组进行扩展,具体操作如下,
S21、新建一个字节数组,长度为原数组长度+16,前4字节保存源文件长度,其余字节填充0,
S22、使用AES对新字节数组进行加密,获得加密后的字节数组,
S23、输出字节流到加密文件中,生成新文件。
结合图2理解,解密过程流程如下:
S1、读取加密文件,处理为字节数组形式,
S2、直接使用AES解密对字节数组进行解密,生成新的字节数组,
S3、读取前4字节,并转换为int类型,获取源文件字节长度,设为Len,
S4、新建一个字节数组,长度为上面获取到的原长度Len,
S5、从解密后的数组第16字节开始,复制到新数组中,
S6、复制完成后,若新数组仍有空余位置,则进行补0操作,
S7、输出新的字节数组到文件中,生成解密文件。
上述方案弥补了AES算法在文件加密过程中由于对齐填充导致的加密后文件无法正常读取的问题,是一种轻量级的解决方案,仅使用添加16字节解决了加密过程中长度引起的文件损坏问题。本专利通过Java代码实现,发布后以在线软件服务的方式运行。使用者可通过加密接口上传文件进行加密,并下载加密后的文件;使用者可通过解密接口上传文件进行解密,并下载解密后的文件。
以上所述,仅是本发明的优选实施例而已,并非是对本发明作其它形式的限制,任何熟悉本专业的技术人员可能利用上述揭示的技术内容加以变更或改型为等同变化的等效实施例。但是凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与改型,仍属于本发明技术方案的保护范围。
- 一种基于指纹的文件加密存储读取系统、方法和移动终端
- 一种基于AES算法的数据库加密方法
- 一种基于可逆逻辑电路的AES的外发文件加密方法
- 一种基于可逆逻辑电路的AES的本地文件加密方法