许多已发布的报告称,在旧版本的Android上,我们需要提供自己基于
可以推测,在某个时刻,Android的IV生成从“糟糕”变为“足够好”。
那么,在哪个版本以下我们应该生成自己的IV而不是使用Android生成的IV呢?
SecureRandom
的初始化向量(IV),因为默认的IV不是随机的:
- 在Java中生成AES的IV
- https://medium.com/@tiensinodev/basic-android-encryption-dos-and-don-ts-7bc2cd3335ff
- https://tozny.com/blog/encrypting-strings-in-android-lets-make-better-mistakes/
- Android加密API未为AES生成安全IV
KeyGenParameterSpec.Builder
上调用setRandomizedEncryptionRequired(false)
,否则会引发“加密时不允许提供调用方IV”的异常。可以推测,在某个时刻,Android的IV生成从“糟糕”变为“足够好”。
那么,在哪个版本以下我们应该生成自己的IV而不是使用Android生成的IV呢?
KeyGenParameterSpec.Builder
,您正在提供随机IV。如果您不这样做,您将会崩溃,因为Google希望KeyGenParameterSpec.Builder
生成随机IV。所以,Google认为Google在这里做得很好,至少在API Level 23时是这样的。您显然不同意Google,这完全可以理解。我经常不同意Google。我只是想看看是否有更多的信息可供参考。 - CommonsWare