-
ECB(电子密码本模式)是最简单的 AES 加密模式,它将明文分成固定大小的块,然后独立加密每个块。这种模式的问题是它不提供严格的数据加密安全性,因为相同的明文块会产生相同的密文块。
-
CBC(密码块链接模式)通过在加密每个块之前将其与前一个块的密文进行 XOR 操作来提高安全性。第一个块会与一个初始化向量(IV)进行 XOR 操作。
- key length(密钥位数,密码长度)
- key (密钥,密码)
- IV (向量)
- mode (加密模式)
- padding (填充方式)
异构系统通信的时候,必然会遇到这个问题。c、c++、lua、csharp、java、php、go、python 这些语言自带或者依赖的第三方 aes 库,都可能默认使用不同的参数。
所以,异构系统使用 aes 进行通信,必须首先确保上面的五个参数是一模一样的。
key length(密钥位数,密码长度) AES128,AES192,AES256(128 位、192 位或 256 位) 128 位对应的是 16 个字节,所以部分平台库上,会使用 16 个字符或者长度为 16 的字符串来做密码。 key (密钥,密码) key 指的就是密码了,AES128 就是 128 位的,如果位数不够,某些库可能会自动填充到 128。 IV (向量) IV 称为初始向量,不同的 IV 加密后的字符串是不同的,加密和解密需要相同的 IV。 mode (加密模式) AES 分为几种模式,比如 ECB,CBC,CFB 等等,这些模式除了 ECB 由于没有使用 IV 而不太安全,其他模式差别并没有太明显。 padding (填充方式) 对于加密解密两端需要使用同一的 PADDING 模式,大部分 PADDING 模式为 PKCS5, PKCS7, NOPADDING。
其实就是 Rijindael
https://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86