Para agrupar o no para agrupar los proveedores de servicios criptográficos de Java
Me enfrento a un dilema regular mientras codifico la seguridadmarcos : "a la piscina o no a la piscina"
Básicamente esta pregunta se divide en dos "grupos":
Grupo 1 :SecureRandom
porque la llamada anextBytes(...)
está sincronizado y podría convertirse en un cuello de botella para una aplicación de aplicaciones web / multiproceso
Grupo 2: proveedores de servicios criptográficos comoMessageDigest
, Signature
, Cipher
, KeyFactory
, ... (debido al costo de lagetInstance()
?)
Cuál es tu opinión ?
¿Cuáles son tus hábitos en tales preguntas?
Editar 09/07/2013Finalmente me tomé el tiempo para probar @QwerkyShare
Clase por mi cuenta y el resultado me parece bastante ... sorprendente.
La clase carecía de mi principal preocupación: piscinas comoGenericObjectPool oStackObjectPool.
Así que he revisado la clase para probar las 4 alternativas:
Única instancia compartida con sincronización.esencianuevas instancias dentro de cada bucle (no estoy interesado en el caso en el que pueda extraer la creación del compendio fuera del bucle)esenciaGenericObjectPool:esenciaStackObjectPool:esenciaTuve que reducir el número de bucles a 100000 ya que 1M estaba tomando demasiado tiempo con las agrupaciones.
También agregué unThread.yield()
al final de cada bucle para dar a la carga una forma más agradable.
Resultados (tiempo de ejecución acumulativo):
Resumen del mensajenuevas instancias: 420 sÚnica instancia: 550 sStackObjectPool: 800 sGenericObjectPool: 1900 sKeyFactorynuevas instancias: 400sÚnica instancia: 350 sStackObjectPool: 2900 sGenericObjectPool: 3500 sSecureRandomStackObjectPool: 1600 snuevas instancias: 2300 sGenericObjectPool: 2300sUna sola instancia: 2800 sCifrarStackObjectPool: 2800 sGenericObjectPool: 3500 sÚnica instancia: 5100 snuevas instancias: 8000 sConclusiónPara MessageDigest y KeyFactory, los pools son asesinos de rendimiento y son incluso peores que una sola instancia con un cuello de botella de sincronización, mientras que son realmente útiles cuando se trata de SecureRandom y Cipher