2010-08-25 11 views
5

Widziałem przykład here. Wszystko dobrze i dobrze i rozumiem, ale opiera się na bibliotece bounceycastle dla dostawcy. Nie chcę dołączać do mojej aplikacji żadnych dodatkowych bibliotek stron trzecich, jeśli mogę w tym pomóc. Nie potrzebuję zabezpieczenia w stylu fortx, tylko niektóre podstawowe szyfrowanie symetryczne do przesyłania przez przewód. Jak mogę wykonać podstawowe szyfrowanie w systemie Android bez bibliotek zewnętrznych?Podstawowe szyfrowanie na Androidzie

dzięki

Odpowiedz

5

Well BouncyCastle jest zawarty w systemie Android, ponieważ możesz zobaczyć, czy próbowałbyś go dołączyć, otrzymasz: D/dalvikvm(9268): DexOpt: not verifying 'Lorg/bouncycastle/x509/extension/SubjectKeyIdentifierStructure;': multiple definitions i tak dalej.

Jednak nie wszystkie algorytmy są zaimplementowane - otrzymasz wyjątek NoSuchAlgorithmException. W Androidzie 2.2 Znalazłem te mają być realizowane:

PBEWITHSHAAND128BITAES-CBC-BC PBEWITHSHAAND3-KEYTRIPLEDES-CBC 1.2.840.113549.1.1.7 PBEWITHSHA256AND256BITAES-CBC-BC PBEWITHSHAAND192BITAES-CBC-BC DESEDE DES 1.2.840.113549.3.7 PBEWITHSHAAND2-KEYTRIPLEDES-CBC 1.3.14.3.2.7 PBEWITHSHA256AND192BITAES-CBC-BC PBEWITHSHAAND256BITAES-CBC-BC PBEWITHSHAAND40BITRC2-CBC AES 2.16.840.1.101.3.4.1.42 PBEWITHSHA256AND128BITAES-CBC-BC 2.16.840.1.101.3.4.1.22 2.16.840.1.101.3.4.1.2

+1

Otrzymuję krótkibufferexception na wywołanie do doFinal podczas szyfrowania (przy użyciu połączonego przykładu) - wszelkie pomysły? – MalcomTucker

+0

Cóż, przykład działa dobrze na moim Nexusie, 2.2. Nie powinieneś mieć krótkiego wyjątku, ale zawsze możesz spróbować ustawić: bajt [] cipherText = new byte [2048]; To se, jeśli szyfrowanie działa, mimo że na wydrukach pojawią się śmieci. –

+1

Mój tekst cipherText jest znacznie większy - około 3800 bajtów. Czy bajt []. Length musi być wielokrotnością liczby 16? – MalcomTucker

5

Nie chcę aby pakiet żadnych dodatkowych bibliotek osobę trzecią, z mojej aplikacji, czy mogę na to poradzić.

Nie potrzebujesz bibliotek stron trzecich do korzystania z javax.crypto. Dostępne są internetowe próbki do używania javax.crypto, takie jak this i this. Jeśli potrzebujesz kodera Base64, jest on w systemie Android 2.2, lub są dostępne również implementacje open source.

+0

Czy wiesz, jakie algorytmy kryptograficzne, że Android BC obsługuje? Wiem, że jest to okaleczona wersja BC, ale nie może znaleźć tego, co faktycznie obsługuje. –

+0

@metalideath: Z wierzchu mojej głowy, nie. Ponadto, ktoś spakował BC jako org.spongycastle, aby ominąć "kaleką wersję", na wypadek gdyby to, czego potrzebujesz, nie było dostępne za pośrednictwem pakietu 'javax.crypto'. – CommonsWare