gpt4 book ai didi

java - GCMParameterSpec 抛出 InvalidAlgorithmParameterException : unknown parameter type

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:18 49 4
gpt4 key购买 nike

我正在做 android 数据加密以保存在 SharedPreferences 中。 GCMParameterSpec 是在 Android 的 API 19 中引入的,我将其用于 AES/GCM/NoPadding 加密。我是这样实现的:

Cipher c = Cipher.getInstance("AES/GCM/NoPadding");
c.init(Cipher.ENCRYPT_MODE, getSecretKey(context),new GCMParameterSpec(128,Base64.decode(myGeneratedIV, Base64.DEFAULT)));

我的问题是,在 Android 4.4.2 (API 19) 中我抛出了提到的错误,但是从 API 21 开始它就可以工作了。

关于异常,来自 Android 文档:

if the given algorithm parameters are inappropriate for this cipher, or this cipher requires algorithm parameters and params is null, or the given algorithm parameters imply a cryptographic strength that would exceed the legal limits (as determined from the configured jurisdiction policy files).

我的问题是:这种行为是否有特定原因?为什么 Cipher 的 init 方法不识别参数?

我什至尝试在不提供特定 IV 的情况下进行加密:

c.init(Cipher.ENCRYPT_MODE, getSecretKey(context));

一旦我尝试以同样的方式解密:

c.init(Cipher.DECRYPT_MODE, getSecretKey(context));

它会抛出相同的异常(InvalidAlgorithmParameterException),说明解密需要 GCMParameterSpec

我尝试将 GCMParameterSpec 仅提供给解密,但我得到了未知参数类型异常。

感谢任何帮助

最佳答案

可能是 Android 中提供程序中的 CipherSpi 实现可能还不支持 GCMParameterSpec。定义 API 与在底层加密提供程序中为其提供支持不同。

您也可以使用为其他模式提供的标准 IvParameterSpec。只需将 GCMParamterSpec 的 (12) IV/nonce 字节直接用作您的 IV。

由于您拥有标准标签大小,因此这应该不会对您的实现造成任何问题。


如果标签大小不同,那么解决方案会变得更加复杂,因为验证将只使用结果标签的最左边的字节。不幸的是,标记生成和验证隐藏在 Cipher 类的 API 设计中。

关于java - GCMParameterSpec 抛出 InvalidAlgorithmParameterException : unknown parameter type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42928339/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com