2015-12-10 4 views
9

Ich versuche zu verstehen, wie Java-Sicherheitsanbieter in Android arbeiten. Ich möchte alle Aufrufe von Cipher.getInstance() erzwingen, um eine Chiffre mit spongy castle als Provider zurückzugeben. Ich habe kein Glück.Android Registrierung Sicherheitsanbieter

Der folgende Code gibt eine Verschlüsselung mit Provider "AndroidKeyStoreBCWorkaround Version 1.0" zurück, aber ich möchte, dass der Provider SpongyCastle ist.

Der Grund, warum ich dies tun möchte, ist, dass ich eine Bibliothek habe, die javax.crypto.Cipher.getInstance() mehrfach aufruft. Ich möchte, dass alle diese Anrufe in das schwammige Schloss gehen, ohne die Bibliothek neu schreiben zu müssen, um "SC" als Provider explizit anzugeben.

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' gibt die Position zurück, an der der Provider hinzugefügt wurde. Können Sie überprüfen, dass es nicht "-1" ist (was bedeutet, dass nicht hinzugefügt)? – rds

+0

Warum rufen Sie 'Security.removeProvider (" BC ")' direkt nach der Installation des Providers auf? – rds

+0

@rds: org.spongycastle.jce.provider.BouncyCastleProvider = "SC" und NICHT "BC". Er fügt Spongy ein und entfernt dann Bouncy. – JDOaktown

Antwort

3

Sie brauchen nur eine andere Klasse zu schreiben, die javax.crypto.Cipher.getInstance aufruft und den „SC“ Variable. Sie können dies tun, ohne Änderungen an der ursprünglichen Bibliothek vorzunehmen, und zwar in derselben Datei wie der von Ihnen bereitgestellte Code. Obwohl diese Antwort zu einfach erscheint, gibt es vielleicht andere Aspekte zu Ihrer Frage? Das ist sowieso die Antwort.

Verwandte Themen