我想了解 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/