Qual è la differenza di usare chiavi BC o di default?
Domanda
Entrambe le linee di codice:
KeyPairGenerator.getInstance("RSA")
KeyPairGenerator.getInstance("RSA", "BC")
funziona bene. Allora, qual è il differecente utilizzando BC o no?
Is aC completamente compatibile con la RSA di default usata? (Utilizzando Sun JDK 6)
Soluzione
BouncyCastle FAQ ci sono alcune voci relative a RSA dettagli di implementazione.
Io personalmente non ho trovato nulla di scritto sui provider di Sun e BC incompatibile, e io suggerisco di usare implementazione RSA nativa di Java se BouncyCastle dipendenza potrebbe essere completamente abbandonato da questo. Si dovrebbe aggiungere dipendenze esterne solo se v'è un vantaggio ben definito da questo.
Se si utilizza biblioteca aC da qualche altra parte nel progetto, credo che non importa il provider da utilizzare.
Modifica
J2ME non include implementazione RSA. Quindi, se avete intenzione di porto la vostra applicazione per J2ME volte, biblioteca BouncyCastle è il modo giusto per andare.
Altri suggerimenti
Da Javadoc del primo costruttore :
Restituisce un oggetto che
KeyPairGenerator
genera / coppie di chiavi private pubbliche per l'algoritmo specificato.Questo metodo attraversa l'elenco dei Provider di sicurezza registrati, iniziando con il più preferito Provider. Un nuovo KeyPairGenerator incapsulando l'oggetto implementazione KeyPairGeneratorSpi dal primo provider che supporti l'algoritmo specificato viene restituito .
Si noti che l'elenco dei membri registrati provider possono essere recuperati tramite il
Security.getProviders()
metodo.
Il Javadoc concatenata di Security.getProviders()
a sua volta dichiara quanto segue:
Restituisce un array contenente tutti i provider installati. L'ordine dei provider nella matrice è la loro ordine di preferenza.
Bene, a quanto pare BC è nel tuo caso "per caso" il primo fornitore preferito. Se v'è incertezza intorno ad esso (vale a dire che si desidera distribuire l'applicazione e si ha alcun controllo su ambiente di utente finale) e si vorrebbe lasciarlo bastone da usare aC, allora si dovrebbe preferisce usare il secondo costruttore.
"BC" restituisce l'attuazione BouncyCastle dell'algoritmo di crittografia.
Se non si specifica il provider restituirà l'attuazione "più prefferred" della crypto algoritmo vale a dire la providor in posizione 1 è la più avremmo gradito nella matrice dei fornitori.