Pooling oder nicht Pooling von Java-Kryptodienstanbietern

LösungMessageDigest => neue Instanzen so oft wie nötig erstellenKeyFactory => Verwenden Sie eine einzelne gemeinsam genutzte InstanzSecureRandom => benutze aStackObjectPoolChiffre => benutze aStackObjectPoolFrage

Ich stehe bei der Verschlüsselung der Sicherheit vor einem regelmäßigen DilemnaFrameworks : "bündeln oder nicht bündeln"

Grundsätzlich ist diese Frage in zwei "Gruppen" unterteilt:

Gruppe 1 :SecureRandom weil der anruf nachnextBytes(...) synchronisiert ist und es zu einem Engpass für eine WebApp / Multithread-App werden kann

Gruppe 2: Krypto-Dienstleister mögenMessageDigest, Signature, Cipher, KeyFactory, ... (wegen der Kosten dergetInstance() ?)

Was ist deine Meinung ?

Was sind Ihre Gewohnheiten bei solchen Fragen?

Edit 09/07/2013

Ich habe mir endlich Zeit genommen, @Qwerky zu testenShare Klasse für mich und ich finde das Ergebnis ziemlich ... überraschend.

Der Klasse fehlte mein Hauptanliegen: Pools mögenGenericObjectPool oderStackObjectPool.

Deshalb habe ich die Klasse überarbeitet, um alle 4 Alternativen zu testen:

Einzelne gemeinsam genutzte Instanz mit SynchronisierungKernneue Instanzen in jeder Schleife (ich bin nicht an dem Fall interessiert, in dem Sie die Digest-Erstellung außerhalb der Schleife ziehen können)KernGenericObjectPool:KernStackObjectPool:Kern

Ich musste die Anzahl der Schleifen auf 100000 reduzieren, da 1M mit Pools zu viel Zeit in Anspruch nahm.

Ich fügte auch einThread.yield() am Ende jeder Schleife, um der Ladung eine schönere Form zu geben.

Ergebnisse (kumulative Laufzeit):

MessageDigestneue Instanzen: 420 sEinzelinstanz: 550 sStackObjectPool: 800 sGenericObjectPool: 1900 sKeyFactoryneue Instanzen: 400sEinzelinstanz: 350 sStackObjectPool: 2900 sGenericObjectPool: 3500 sSecureRandomStackObjectPool: 1600 sneue Instanzen: 2300 sGenericObjectPool: 2300sEinzelinstanz: 2800 sChiffreStackObjectPool: 2800 sGenericObjectPool: 3500 sEinzelinstanz: 5100 sneue Instanzen: 8000 sFazit

Für MessageDigest und KeyFactory sind Pools Perfekte Killer und sogar noch schlimmer als eine einzelne Instanz mit einem Synchronisationsengpass, während sie für SecureRandom und Cipher wirklich nützlich sind

Antworten auf die Frage(2)

Ihre Antwort auf die Frage