我们需要为Android和IOS创建相同的加密方法。我们已经有使用Java编写的现有工作代码,但是我正在努力在Objective C中找到等效的解决方案。基本上,这就是我们要复制的内容。
Cipher cipher = Cipher.getInstance("AES");
int blockSize = cipher.getBlockSize();
我在加密方面还很陌生,因此我可能偶然发现了有用的文章,但无法完全理解它。在此先感谢
Cipher
与算法"AES"
一起使用的是提供者特定的操作模式。对于普通的JDK,这意味着它将使用"AES/ECB/PKCS5Padding"
,除非提供程序已被弄乱或使用了硬件密钥。大多数提供程序都将模仿Oracle提供程序,因此通常这就是您所获得的。
因此,基本上,您需要以ECB模式(因此没有IV)和PKCS#7填充(Java的PKCS#5填充不是正确的名称,但等效于PKCS#7填充)来实现AES。
关于块大小:AES始终具有128位的块大小。 Rijndael,原始密码也可能具有不同的块大小,除了128位以外,主要还有256位。因此,在为完整的Rijndael实现指定AES时,您必须更加小心,并且不要混淆密钥大小和块大小。
注意,Cipher#getBlockSize()
返回字节的大小而不是位。
请注意,ECB模式通常不是应用分组密码的安全方法,因此您可能需要升级协议。