- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在做 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/
我正在做 android 数据加密以保存在 SharedPreferences 中。 GCMParameterSpec 是在 Android 的 API 19 中引入的,我将其用于 AES/GCM/N
我想创建一个函数来解密由nodejs加密的aes-256-gcm消息 async decrypt_pw(password, key) { const key = 'secret'; c
我正在使用 AES/GCM/NoPadding 算法在 Android(API 19 及更高版本)上加密一些数据,然后再将其解密。 我使用的 key 大小是 32 字节并提供给我 除了加密之外,我还想
我是一名优秀的程序员,十分优秀!