AES 加密/解密 运算模式: CBC (密码块链) ECB (电子密码本) OFB (输出反馈) CFB (加密反馈) CTS (密文窃取) CTR (计算器模式) GCM (Galois/Counter) 填充模式: None PKCS7 Zeros ANSIX923 ISO10126 密钥长度: 128 bits 192 bits 256 bits 密钥: Text Hex 偏移: Text Hex Nonce 随机数: Text Hex 验证数据: Text Hex 0 字符编码: UTF-8 UTF-16LE UTF-16BE GBK(简繁体) GB18030(中日韩) Big5(台湾繁体中文) Hex(16 进制) ASMO-708 CP1025 CP866 CP875 DOS-720 DOS-862 EUC-JP IBM-THAI IBM037 IBM273 IBM277 IBM278 IBM280 IBM284 IBM285 IBM290 IBM297 IBM420 IBM423 IBM424 IBM437 IBM500 IBM737 IBM775 IBM850 IBM852 IBM855 IBM857 IBM860 IBM861 IBM863 IBM864 IBM865 IBM869 IBM870 IBM871 IBM880 IBM905 IBM1026 IBM00858 IBM00924 IBM01047 IBM01140 IBM01141 IBM01142 IBM01143 IBM01144 IBM01145 IBM01146 IBM01147 IBM01148 IBM01149 ISO-8859-1 ISO-8859-2 ISO-8859-3 ISO-8859-4 ISO-8859-5 ISO-8859-6 ISO-8859-7 ISO-8859-8 ISO-8859-9 ISO-8859-13 ISO-8859-15 JOHAB KOI8-R KOI8-U KS_C_5601-1987 MACINTOSH SHIFT_JIS US-ASCII UTF-32LE UTF-32BE WINDOWS-1250 WINDOWS-1251 WINDOWS-1252 WINDOWS-1253 WINDOWS-1254 WINDOWS-1255 WINDOWS-1256 WINDOWS-1257 WINDOWS-1258 WINDOWS-874 X-CHINESE-CNS X-CHINESE-ETEN X-CP20001 X-CP20003 X-CP20004 X-CP20005 X-CP20261 X-CP20269 X-CP20936 X-CP20949 X-EBCDIC-KOREANEXTENDED X-EUROPA X-IA5 X-IA5-GERMAN X-IA5-NORWEGIAN X-IA5-SWEDISH X-MAC-ARABIC X-MAC-CE X-MAC-CHINESETRAD X-MAC-CROATIAN X-MAC-CYRILLIC X-MAC-GREEK X-MAC-HEBREW X-MAC-ICELANDIC X-MAC-JAPANESE X-MAC-ROMANIAN X-MAC-THAI X-MAC-TURKISH X-MAC-UKRAINIAN 格式: Base64 Hex (格式加密表示输出,解密表示输入) 加密 解密 ↕ 交换 0 说明 AES:Advanced Encryption Standard,又称 Rijndael 加密法。 这个标准用来替代原先的 DES(Data Encryption Standard),比 DES 有更高的安全性。 AES 算法采用固定长度的密钥(128 bits、192 bits 或256 bits)来加密和解密数据块,加密和解密过程都是基于矩阵运算和字节替换等操作进行的。 加密时会将明文数据按 16 字节(128 bits) 进行分组,不足 16 字节时将用特定的 Padding(如PKCS7)字符进填充,所以不同的 Padding 方式密文最后一段可能不一样。 运算模式 CBC:Cipher Block Chaining,密码块链,明文被分成固定大小的块,并按顺序进行加密,每一个块(分组)要先和前一个分组加密后的数据进行 XOR 异或操作,然后再进行加密。 这样每个密文块依赖该块之前的所有明文块,为了保持每条消息都具有唯一性,第一个数据块进行加密之前需要用初始化向量 IV 进行异或操作。 CBC 模式是一种最常用的加密模式,它主要缺点是加密是连续的,不能并行处理,并且与 ECB 一样消息块必须填充到块大小的整倍数。 ECB:Electronic Codebook, 电子密码本,是最简单的加密模式,明文消息被分成固定大小的块(分组),并且每个块被单独加密。 每个块的加密和解密都是独立的,且使用相同的方法进行加密,所以可以进行并行计算,但是这种方法一旦有一个块被破解,使用相同的方法可以解密所有的明文数据,安全性比较差。 适用于数据较少的情形,加密前需要把明文数据填充到块大小的整倍数。 OFB:Output Feedback,输出反馈,将块密码转化为流密码,逐位或逐字节加密。使用一个初始向量(IV)作为输入,通过块密码算法生成一个密钥流。 密钥流与明文进行异或操作,得到密文。具有并行性,适用于实时加密和解密。不需要填充,可以处理任意长度的数据。不提供数据完整性和认证,需要额外的机制来确保数据的完整性和认证。 CFB:Cipher Feedback,密码反馈,将数据分成位(bit)而不是块,提供了流式加密(stream cipher)的特性,可以对任意长度的数据进行加密。它允许逐位或逐字节地加密和解密,并且不需要填充(padding)。 和 CBC 模式比较相似,前一个分组的密文加密后和当前分组的明文 XOR 异或操作生成当前分组的密文。因此,CFB 模式对于传输错误和数据丢失比较敏感,因为一个错误位会影响后续的加密结果。 CTS:Cipher Text Stealing,密文窃取,用于解决块密码加密中最后一个数据块长度不足的问题。 在加密过程中,最后一个数据块长度不足时,会使用部分密文块填充明文块,然后进行加密。 在解密过程中,最后一个数据块长度不足时,会使用部分密文块解密,然后去除填充部分。保持了加密前后数据长度的一致性。 CTR:Counter,计算器模式,将块密码转化为流密码,逐位或逐字节加密。使用一个计数器作为输入,通过块密码算法生成一个密钥流。 密钥流与明文进行异或操作,得到密文。具有并行性,适用于实时加密和解密。不需要填充,可以处理任意长度的数据。不提供数据完整性和认证,需要额外的机制来确保数据的完整性和认证。 填充模式 None:不填充 PKCS7:填充字符串由一个字节序列组成,每个字节填充该字节序列的长度 Zeros:填充字符串由设置为零的字节组成 ANSIX923:填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节均填充数字零 ISO10126:填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据 分组对称加密算法有些运算模式要求明文数据的字节长度必须是其块大小的整倍数,因此在加密明文数据之前我们必须对明文数据进行填充。 密钥(偏移)Text 和 Hex Text 表示是文本格式,加密前会使用 UTF-8 编码,把它转成 byte[] 数组 Hex 表示是十六进制格式,加密前会把十六进制字符串转成 byte[] 数组 字符编码与格式 加密说明 第一种情况,以 DES 加密为例,密钥下拉框选择“Text”,输入“12345678”,偏移为空;加密字符串“中国abc”,字符编码选择“UTF-8”,表示字符串“中国abc”加密前会以“UTF-8”编码成 byte[] 数组, 加密的输出是十六进制,格式下拉框选择“Hex”,加密的输出结果就是“C886FF3D9DCB37FA1FA0EAD95889DF3E”。 查看示例 另外一种情况,还是以 DES 加密为例,密钥下拉框选择“Text”,输入“12345678”,偏移为空;加密的不是字符串,而是十六进制数据,比如是 [0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08], 字符编码必须要选择“Hex”,表示加密前,不需要编码了,十六进制数据可以直接转成字节数组,加密的输出是 Base64,格式下拉框选择“Base64”,加密的输出结果就是“up/vqMd1Eq4d/TFcc22l3Q==”。 查看示例 字符编码与格式 解密说明 第一种情况,以 DES 解密为例,密钥下拉框选择“Text”,输入“12345678”,偏移为空;解密第一种情况加密输出的十六进制字符串“C886FF3D9DCB37FA1FA0EAD95889DF3E”,所以格式下拉框选择“Hex”,解密之后的数据编码是“UTF-8”,所以字符编码选择“UTF-8”,解密后的字符串是“中国abc”。 查看示例 另外一种情况,还是以 DES 解密为例,密钥下拉框选择“Text”,输入“12345678”,偏移为空;解密第二种情况加密输出的 Base64 字符串“up/vqMd1Eq4d/TFcc22l3Q==”,所以格式下拉框选择“Base64”,解密之后的数据没有任何编码,是十六进制数据, 所以字符编码选择“Hex”(如果你选择“UTF-8”,肯定会乱码),最后解密后的字符串是“0102030405060708”。 查看示例