让 AES-GCM 也适用于旧的 android 版本
Get AES-GCM to work also on older android versions
我正在 android 应用程序中以 GCM 操作模式实施 AES 加密算法。
我的 IDE (Intellij Idea) 告诉我要使用 javax.crypto.spec.GCMParameterSpec
条件 android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.KITKAT
是必需的。
我在条件未验证时尝试使用 javax.crypto.spec.GCMParameterSpec
,我下载了 source file 并将其包含在我的项目中,但加密操作无法正常工作(解密数据与原始数据不匹配或 java.security.InvalidAlgorithmParameterException: IV must be specified in GCM mode
).
关于我如何支持以前版本的 Android KITKAT,您有什么建议吗?
提前致谢。
基于Java6的Android的初始版本没有给你GCMParameterSpec
,但他们会用IvParameterSpec
代替。除了(通常是 12 字节的)IV,GCMParameterSpec
会给你两个额外的操作:支持额外的数据和标签大小。
现在标签大小不是什么大问题:首先,通常使用完整的 128 位/16 字节。此外,您可以从密文末尾删除这些字节,直到达到所需的标签大小,例如删除 4 个字节/32 位以获得 96 位的标记大小。
附加数据是个问题,据我所知,没有办法指定这些数据,至少如果您需要 Cipher
实例,则无法指定。您当然可以使用 GCMBlockCipher
代替,但您不会使用 Cipher
和平台提供的任何可能的加速(因为 Bouncy 只是软件)。
是的,如前所述,完全可以自己为 Android 实施 GCM 模式,因为您不需要签署任何提供商。当然,您必须使用不同的 GCMParameterSpec
实现,最好只使用旧平台的提供程序,因此似乎需要进行一些运行时切换。
我正在 android 应用程序中以 GCM 操作模式实施 AES 加密算法。
我的 IDE (Intellij Idea) 告诉我要使用 javax.crypto.spec.GCMParameterSpec
条件 android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.KITKAT
是必需的。
我在条件未验证时尝试使用 javax.crypto.spec.GCMParameterSpec
,我下载了 source file 并将其包含在我的项目中,但加密操作无法正常工作(解密数据与原始数据不匹配或 java.security.InvalidAlgorithmParameterException: IV must be specified in GCM mode
).
关于我如何支持以前版本的 Android KITKAT,您有什么建议吗?
提前致谢。
基于Java6的Android的初始版本没有给你GCMParameterSpec
,但他们会用IvParameterSpec
代替。除了(通常是 12 字节的)IV,GCMParameterSpec
会给你两个额外的操作:支持额外的数据和标签大小。
现在标签大小不是什么大问题:首先,通常使用完整的 128 位/16 字节。此外,您可以从密文末尾删除这些字节,直到达到所需的标签大小,例如删除 4 个字节/32 位以获得 96 位的标记大小。
附加数据是个问题,据我所知,没有办法指定这些数据,至少如果您需要 Cipher
实例,则无法指定。您当然可以使用 GCMBlockCipher
代替,但您不会使用 Cipher
和平台提供的任何可能的加速(因为 Bouncy 只是软件)。
是的,如前所述,完全可以自己为 Android 实施 GCM 模式,因为您不需要签署任何提供商。当然,您必须使用不同的 GCMParameterSpec
实现,最好只使用旧平台的提供程序,因此似乎需要进行一些运行时切换。