创建密码实例 Objective-C 并获取块大小

Create Cipher Instance Objective-C and get Block Size

我们需要为 Android 和 iOS 创建相同的加密方法。我们已经编写了现有的工作代码 Java,但我正在努力寻找 Objective-C 中的等效解决方案。基本上,这就是我们想要复制的。

Cipher cipher = Cipher.getInstance("AES");
int blockSize = cipher.getBlockSize();

我对加密还很陌生,所以我可能偶然发现了有用的文章,但不能完全理解它。

Cipher 算法 "AES" 正在使用提供程序特定的操作模式。对于正常的 JDK 这意味着它使用 "AES/ECB/PKCS5Padding" 除非提供者被弄乱或使用了硬件密钥。大多数供应商会模仿 Oracle 供应商,所以通常这就是您得到的。

所以基本上你需要在 ECB 模式下实现 AES(因此没有 IV)和 PKCS#7 填充(Java 的 PKCS#5 填充不是正确的名称,但它是 equivalent to PKCS#7 padding).

至于块大小:AES 始终具有 128 位的块大小。 Rijndael,原始密码也可能有不同的块大小,除了 128 位之外,主要是 256 位。因此,在为 Rijndael 的完整实现指定 AES 时必须更加小心,不要混淆密钥大小和块大小。

请注意 Cipher#getBlockSize() returns 大小以字节而不是位为单位。


请注意,ECB 模式通常不是应用分组密码的安全方式,因此您可能需要升级协议。