如果您在ECB 模式下加密,则可以使用没有 IV 的 AES ,但这不是一个好主意。在 ECB 模式下,相同的明文总是加密成相同的密文,因此明文中的模式可以“显示”为密文中可识别的模式。不鼓励使用 ECB 模式。
为了避免ECB模式的问题,密码可以将明文的每个块与前一个块的加密结果结合起来,称为CBC模式。这可以防止明文中的模式在密文中被识别,因为相同的明文会根据它在流中的位置产生不同的密文。但是如果你将每个块与它之前的块组合,你将第一个块与什么组合?这就是IV的用途。
将 IV 与密文一起发送并不是什么大问题。它很小,对于 AES 来说只有 16 个字节——传输几乎不会“过度杀伤”。将其视为加密文件的一部分。
不过,您的问题提出了一个与密钥管理相关的问题。AES 是一种对称密码,这意味着解密数据的人需要拥有与手机用来加密数据相同的密钥。如果您有很多手机都将 AES 加密数据发送到服务器,那么您必须跟踪很多不同的密钥。
(我假设每部手机都使用不同的密钥,否则您就没有安全性。如果所有手机都使用相同的密钥进行加密,那么任何拥有您的应用程序的人都可以提取该密钥并使用它来解密来自其他人手机的数据。 )
如果您使用TLS向服务器发送数据,它会负责为每个连接生成一个临时加密密钥,并自动加密手机上的数据并在服务器上解密。您根本不必直接与 AES 打交道。
但由于您“手动”实施加密,您还必须手动实施密钥管理。服务器如何知道手机的密钥?“正确”的答案是使用Diffie-Hellman key exchange。“错误”的答案是手机生成密钥,然后将其发送到服务器,因为任何可以拦截加密文件的人也可以拦截密钥。
您应该考虑使用公钥密码术来加密发送到服务器的文件。这样,手机只需要知道服务器的公钥,不需要保密。