私はJavaセキュリティプロバイダがどのようにAndroidで動作するかを理解しようとしています。私はCipher.getInstance()へのすべての呼び出しを強制的にspongy castleをプロバイダとして返すようにしたいと思います。私は運がない。セキュリティプロバイダを登録しているAndroid
次のコードは、プロバイダが「AndroidKeyStoreBCWorkaroundバージョン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)
{
}
}
}
'Security.insertProviderAt'は、プロバイダが追加された位置を返します。 '-1'でないことを確認できますか(これは追加されないことを意味します)? – rds
プロバイダをインストールした直後に 'Security.removeProvider(" BC ")をなぜ呼び出すのですか? – rds
@rds:org.spongycastle.jce.provider.BouncyCastleProvider = "SC" "BC"ではありません。 彼はスポンジを挿入して弾みを取り除いています。 – JDOaktown