创建密码实例 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 模式通常不是应用分组密码的安全方式,因此您可能需要升级协议。
我们需要为 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 模式通常不是应用分组密码的安全方式,因此您可能需要升级协议。