java - Android 注册安全提供者

标签 java android security encryption

我想了解 java 安全提供程序如何在 android 中工作。我想强制所有对 Cipher.getInstance() 的调用返回一个以海绵城堡作为提供者的密码。我运气不好。

以下代码返回提供者为“AndroidKeyStoreBCWorkaround version 1.0”的密码,但我希望提供者为 SpongyCaSTLe。

我想这样做的原因是,我有一个多次调用 javax.crypto.Cipher.getInstance() 的库。我希望所有这些调用都转到海绵城堡,而不必重新编写库以明确指定“SC”作为提供者。

public class MainActivity extends Activity
{
    static
    {
        Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
        Security.removeProvider("BC");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        try
        {
          //this returns provider = "AndroidKeyStoreBCWorkaround version 1.0"
          javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES/CTR/NoPadding");
          //this works
          // cipher = javax.crypto.Cipher.getInstance("AES/CTR/NoPadding", "SC");
        }
        catch(Exception e)
        {
        }
    }
}

最佳答案

您只需要编写另一个调用 javax.crypto.Cipher.getInstance 并将“SC”变量传递给它的类。您应该能够在不对原始库进行任何更改的情况下执行此操作,并且可以在与您提供的代码相同的文件中执行此操作。虽然这个答案看起来过于简单,但您的问题可能还有其他方面?无论如何,这就是答案。

关于java - Android 注册安全提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34211780/

相关文章:

java - Java中如何通知特定的线程

android - 我有一个图像列表。单击每个 imageView 时,我想从该应用程序进行调用。但我收到错误

android - 将 Unity3d 场景与 PhoneGap 应用程序结合使用

security - 通过 TLS 对参数和内容进行哈希验证的优势

c# - java 与 c# - 哪个在安全性方面更安全?

java - 访问其他包的其他类中定义的字符串变量

java - 关闭时是否存在现有的 FileInputStream 删除?

android - Recyclerview item点击波纹效果

php - 站点使用 SSL 保护,但当刷新 SSL 消失时

java - 如何在 JSONArray 中正确嵌套数组