Sto cercando di capire come funzionano i provider di sicurezza Java in Android. Vorrei forzare tutte le chiamate a Cipher.getInstance() per restituire un codice con castello spugnoso come provider. Non ho fortuna.Fornitore di protezione registrazione Android
Il seguente codice restituisce un codice con provider "AndroidKeyStoreBCWorkaround versione 1.0", ma desidero che il provider sia SpongyCastle.
Il motivo per cui voglio farlo è che ho una libreria che chiama più volte javax.crypto.Cipher.getInstance(). Voglio che tutte quelle chiamate vadano al castello spugnoso, senza dover riscrivere la libreria per specificare esplicitamente "SC" come provider.
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' restituisce la posizione in cui viene aggiunto il provider. Puoi controllare che non sia '-1' (che significa non aggiunto)? – rds
Perché chiami 'Security.removeProvider (" BC ")' subito dopo aver installato il provider? – rds
@rds: org.spongycastle.jce.provider.BouncyCastleProvider = "SC" e NON "BC". Inserisce Spongy quindi rimuove Bouncy. – JDOaktown