2015-12-10 15 views
9

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) 
     { 
     } 
    } 
} 
+0

'Security.insertProviderAt' restituisce la posizione in cui viene aggiunto il provider. Puoi controllare che non sia '-1' (che significa non aggiunto)? – rds

+0

Perché chiami 'Security.removeProvider (" BC ")' subito dopo aver installato il provider? – rds

+0

@rds: org.spongycastle.jce.provider.BouncyCastleProvider = "SC" e NON "BC". Inserisce Spongy quindi rimuove Bouncy. – JDOaktown

risposta

3

Hai solo bisogno di scrivere un altro classe che chiama javax.crypto.Cipher.getInstance e lo passa la variabile "SC". Dovresti essere in grado di farlo senza apportare modifiche alla libreria originale e puoi farlo nello stesso file del codice che hai fornito. Anche se questa risposta sembra eccessivamente semplice, forse ci sono altri aspetti della tua domanda? Questa è la risposta, comunque.