2015-12-10 13 views
9

Próbuję zrozumieć, jak dostawcy bezpieczeństwa Java działają na Androidzie. Chciałbym wymusić wszystkie wywołania funkcji Cipher.getInstance(), aby zwrócić szyfr jako gąbczasty zamek jako dostawcę. Nie mam szczęścia.Android rejestrujący dostawcę zabezpieczeń

Poniższy kod zwraca szyfru z dostawca jest "AndroidKeyStoreBCWorkaround wersja 1.0", ale chcę dostawcą być SpongyCastle.

Powodem, dla którego chcę to zrobić, jest to, że mam bibliotekę, która wielokrotnie wywołuje funkcję javax.crypto.Cipher.getInstance(). Chcę, aby wszystkie te połączenia trafiały do ​​gąbczastego zamku, bez konieczności ponownego pisania biblioteki, aby wyraźnie określić "SC" jako dostawcę.

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' zwraca pozycję, przy której dostawca jest dodawany. Czy możesz sprawdzić, czy nie jest "-1" (co oznacza, że ​​nie dodano)? – rds

+0

Dlaczego nazywasz 'Security.removeProvider (" BC ")' zaraz po zainstalowaniu dostawcy? – rds

+0

@rds: org.spongycastle.jce.provider.BouncyCastleProvider = "SC" i NIE "BC". Wstawia Spongy, a następnie usuwa Bouncy. – JDOaktown

Odpowiedz

3

Wystarczy napisać kolejną klasę, która wywołuje javax.crypto.Cipher.getInstance i przekazuje ją zmienną „SC”. Powinieneś być w stanie to zrobić bez dokonywania jakichkolwiek zmian w oryginalnej bibliotece i możesz to zrobić w tym samym pliku, co podany kod. Choć ta odpowiedź wydaje się zbyt prosta, być może są inne aspekty twojego pytania? W każdym razie to jest odpowiedź.

Powiązane problemy