2012-09-28 21 views
16

Tengo un código que funciona bien en Android. Cuando lo porté a mi máquina con Windows 64 bit con JRE 1.6, el código no funcionó.Excepción al llamar a MessageDigest.getInstance ("SHA256")

Cuando ejecuto la siguiente línea de código:

final MessageDigest digest = MessageDigest.getInstance("SHA256") 

consigo la siguiente excepción:

java.security.NoSuchAlgorithmException: SHA256 MessageDigest not available 
at sun.security.jca.GetInstance.getInstance(Unknown Source) 
at java.security.Security.getImpl(Unknown Source) 
at java.security.MessageDigest.getInstance(Unknown Source) 

Me conocer en la gente de Internet que afirman que es posible utilizar SHA256 con la criptografía estándar proveedor que viene con Sun JRE y la gente dice que necesito usar otro proveedor como, por ejemplo, Bouncy Castle.

Preferiría no utilizar un proveedor diferente. ¿Es posible hacerlo funcionar?

Respuesta

29

En caso de duda sobre qué algoritmos puede utilizar para un servicio JCA, su primer puerto de escala debe ser el JCA Standard Algorithm Name Documentation. Los algoritmos garantizados a ser apoyadas por el servicio MessageDigest en una JVM JCA compatibles son:

  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

Es común que los proveedores suministren alias para estos algoritmos, por lo que probablemente funcione con Bouncy Castle, pero debe seguir estos si puede maximizar la portabilidad.

Si cambia de código a la siguiente, que funcionará como se esperaba:

final MessageDigest digest = MessageDigest.getInstance("SHA-256"); 
+0

Sí, '" SHA256 "' es un alias presente en Bouncy. Tuve un error de Bouncy Castle corregido que usaba '" SHA256 "' en uno de los paquetes de protocolo de Bouncy, en lugar de '" SHA-256 "' que ha sido el nombre estándar en la JCE. Este es el peligro de aceptar más que el mínimo absoluto: funciona de una manera pero no de la otra. –

+1

Entonces, ¿qué haces cuando el MD5 "garantizado" falla? En Oracle JRE, pero solo en algunas máquinas y no en otras ... Eso me ha dejado perplejo ahora mismo. :-( –

+0

¿Ha comprobado sus proveedores de seguridad? –

Cuestiones relacionadas