Исключение при вызове MessageDigest.getInstance( "SHA256" ) - программирование
Подтвердить что ты не робот

Исключение при вызове MessageDigest.getInstance( "SHA256" )

У меня есть код, который хорошо работает на Android. Когда я портировал его на 64-разрядную машину Windows с JRE 1.6, код не работал.

Когда я запускаю следующую строку кода:

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

Я получаю следующее исключение:

 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)

Я нашел в Интернете людей, утверждающих, что можно использовать SHA256 со стандартным провайдером криптографии, который поставляется с Sun JRE, и люди говорят, что мне нужно использовать другого провайдера, например, Bouncy Castle.

Я бы предпочел не использовать другого провайдера. Можно ли заставить его работать?

4b9b3361

Ответ 1

Если вы сомневаетесь в том, какие алгоритмы вы можете использовать для службы JCA, вашим первым портом вызова должна быть JAA стандартная документация по имени алгоритма. Алгоритмы гарантированные, поддерживаемые службой MessageDigest в JVM-совместимой JVM:

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

Общим для поставщиков является предоставление псевдонимов для этих алгоритмов, поэтому он, вероятно, будет работать с Bouncy Castle, но вы должны придерживаться этого, если сможете, чтобы максимизировать переносимость.

Если вы измените код на следующий, он будет работать, как ожидалось:

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