web-dev-qa-db-fra.com

Comment inclure le JAR Spongy Castle dans Android?

Apparemment Spongy Castle est l'alternative Android pour utiliser une version complète de Bouncy Castle.

Cependant, lors de l'importation du pot, j'obtiens toutes sortes d'erreurs "ne peuvent pas être résolues" car il repose sur des packages non inclus avec Android, principalement javax.mail, javax.activation et javax.awt.datatransfer.

Alors, quelle est la meilleure façon de contourner cela? Les réponses à cette question et cette indiquent que ces paquets ne devraient pas être utilisés du tout, et cette question populaire n'envisage même pas de trouver un moyen pour récupérer AWT. Alors, comment Spongy Castle compte-t-il sur eux? Les gens utilisent Spongy Castle , non?

28
Nathan Fig

Ce sont deux exemples très simples de la façon d'inclure Spongy Castle dans un projet:

Depuis la v1.47, Spongy Castle a été divisé en sous-pots séparés qui reflètent exactement les artefacts Bouncy Castle correspondants (par exemple sc-light-jdk15on.jar, scpg-jdk15on.jar, etc.), et il est important de vous assurer d'inclure tous les pots Spongy Castle requis pour ce que vous faites.

Des informations complètes sur les dépendances sont disponibles à l'adresse suivante:

http://rtyley.github.com/spongycastle/#downloads

Au minimum, vous aurez besoin du sc-light-jdk15on.jar (l'implémentation de base de l'API légère) et probablement scprov-jdk15on.jar (le JCE wrapper autour de l'API léger). Si vous utilisez Maven, tous ces éléments de gestion des dépendances sont pris en charge pour vous.

Les dépendances problématiques que vous décrivez sur javax.mail, javax.activation, etc., indiquent que vous avez peut-être choisi un fichier incorrect (par exemple, celui qui contient toutes les bibliothèques, plutôt que celui du "fournisseur principal") - comme scprov-jdk15on jar définitivement n'a aucune de ces dépendances étranges, et fonctionne parfaitement sur Android.

(Avertissement, je suis le mainteneur de Spongy Castle, mais j'ai également eu beaucoup de rapports de réussite d'autres utilisateurs!)

32
Roberto Tyley

Si vous utilisez gradle, vous pouvez simplement spécifier vos dépendances dans build.gradle fichier comme celui-ci:

dependencies {
     ....
    compile 'com.madgag.spongycastle:core:1.54.0.0'
    compile 'com.madgag.spongycastle:prov:1.54.0.0'
    compile 'com.madgag.spongycastle:pkix:1.54.0.0'
    compile 'com.madgag.spongycastle:pg:1.54.0.0'

    }

Vous pouvez trouver la dernière version de la bibliothèque ici .

N'oubliez pas de l'insérer en tant que fournisseur de sécurité dans votre application.

    static {
    Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
}
39
ua741

En attendant, BouncyCastle peut être utilisé directement. Dans les versions ultérieures Android, le nom du package BC interne a changé et au moins la collision du nom du package n'est plus le problème, mais il y a toujours des problèmes. Pour une solution, regardez ceci: https://stackoverflow.com/a/57897224/3351474

0
k_o_