AES加密解密
工具说明:
- 本工具提供 AES 算法加密及解密功能,AES 是高级加密标准(Advanced Encryption Standard)的缩写,是对称密匙加密中最流行的加密算法之一。本工具还支持 ECB、CBC、CFB、CTR、CTRGladman和 OFB 6 种加解密模式。
什么是AES加密:
- 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
- 这个标准用来替代原先的 DES(Data Encryption Standard),比 DES 有更高的安全性。
- AES 算法采用固定长度的密钥(128 bits、192 bits 或 256 bits)来加密和解密数据块,加密和解密过程都是基于矩阵运算和字节替换等操作进行的。
- AES 算法加密时会将明文数据按 16 字节(128 bits) 进行分组,不足 16 字节时将用特定的 Padding(如PCKS7)字符进填充,所以不同的 Padding 方式密文最后一段可能不一样。
- 此外,AES 加密的 key 密钥参数如果是字符串类型,那么偏移参数 iv 就是随机产生的,加密结果也是随机的。所以,key 尽量用 WordArray 类型的,同时再补上 iv、mode、pad 参数
AES算法详解:
- 加密模式:
- ECB:Electronic Codebook, 电子密码本,是最简单的加密模式,明文消息被分成固定大小的块(分组),并且每个块被单独加密。 每个块的加密和解密都是独立的,且使用相同的方法进行加密,所以可以进行并行计算,但是这种方法一旦有一个块被破解,使用相同的方法可以解密所有的明文数据,安全性比较差。适用于数据较少的情形,加密前需要把明文数据填充到块大小的整倍数。优点:简单、孤立,每个块单独运算。适合并行运算。传输错误一般只影响当前块。缺点:同明文输出同密文,可能导致明文攻击。我们平时用的AES加密很多都是ECB模式的,此模式加密不需要向量IV。
- CBC:Cipher Block Chaining,密码块链,明文被分成固定大小的块,并按顺序进行加密,每一个块(分组)要先和前一个分组加密后的数据进行 XOR 异或操作,然后再进行加密。这样每个密文块依赖该块之前的所有明文块,为了保持每条消息都具有唯一性,第一个数据块进行加密之前需要用初始化向量 IV 进行异或操作。CBC 模式是一种最常用的加密模式,它主要缺点是加密是连续的,不能并行处理,并且与 ECB 一样消息块必须填充到块大小的整倍数。优点:串行化运算,相同明文不同密文,缺点:需要初始向量,不过这其实不算缺点,下文的 CTR 也是需要随机数的。如果出现传输错误,那么后续结果解密后可能全部错误。
- CFB:Cipher Feedback,密码反馈,将数据分成位(bit)而不是块,提供了流式加密(stream cipher)的特性,可以对任意长度的数据进行加密。它允许逐位或逐字节地加密和解密,并且不需要填充(padding)。 和 CBC 模式比较相似,前一个分组的密文加密后和当前分组的明文 XOR 异或操作生成当前分组的密文。因此,CFB 模式对于传输错误和数据丢失比较敏感,因为一个错误位会影响后续的加密结果。优点:同明文不同密文,分组密钥转换为流密码。缺点:串行运算不利并行,传输错误可能导致后续传输块错误。
- CTR:Counter mode,计数器模式,它通过递增一个加密计数器以产生连续的密钥流,其中,计数器可以是任意保证长时间不产生重复输出的函数。计数器模式实际上将分组密码改变成了流密码,通过计数器生成了相应的密钥流。CTR模式不需要 padding ,故其加密后的密文长度是可知的。优点:无填充,同明文不同密文,每个块单独运算,适合并行运算。缺点:可能导致明文攻击。
- OFB:Output feedback,又称输出反馈模式,前一组密码算法输出会输入到下一组密码算法输入。先用块加密器生成密钥流,然后再将密钥流与明文流异或得到密文流,解密是先用块加密器生成密钥流,再将密钥流与密文流异或得到明文,由于异或操作的对称性所以加密和解密的流程是完全一样的。只影响当前分组,可用在卫星通信中。优点:同明文不同密文,分组密钥转换为流密码。缺点:串行运算不利并行,传输错误可能导致后续传输块错误。
- 填充模式:
- None:不填充。
- PKCS7:填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。
- Zero:填充字符串由设置为零的字节组成。
- ANSIX923:填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节均填充数字零。
- ISO10126:填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据。
- 另外,分组对称加密算法有些运算模式要求明文数据的字节长度必须是其块大小的整倍数,因此在加密明文数据之前我们必须对明文数据进行填充。
皖ICP备2023023451号
Copyright © L1MN.COM 联系方式:l1mnfw@163.com