2012-09-28 22 views
16

Mam kod, który działa dobrze na Androida. Kiedy przeportowałem go na mój 64-bitowy komputer Windows z JRE 1.6, kod nie działał.Wyjątek podczas wywoływania MessageDigest.getInstance ("SHA256")

Kiedy uruchomić następującą linię kodu:

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

otrzymuję następujący wyjątek:

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) 

znalazłem na ludzi internetowych, twierdząc, że jest to możliwe do wykorzystania SHA256 ze standardowym krypto dostawca, który jest dostarczany z Sun JRE, a ludzie mówią, że potrzebuję innego dostawcy, na przykład Bouncy Castle.

Wolałbym nie korzystać z innego dostawcy. Czy to możliwe, aby działało?

Odpowiedz

29

W przypadku wątpliwości dotyczących algorytmów, które można zastosować w usłudze JCA, pierwszym połączeniem powinien być JCA Standard Algorithm Name Documentation. Algorytmy zagwarantowane być obsługiwany przez serwis w JVM JCA zgodnym MessageDigest są:

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

Często dostawcy dostarczają aliasy dla tych algorytmów, dlatego prawdopodobnie będzie działać z Bouncy Castle, ale powinieneś trzymać się tych, jeśli możesz zmaksymalizować przenośność.

W przypadku zmiany kodu do dalszej części, będzie działać zgodnie z oczekiwaniami:

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

Tak, '" SHA256 "' jest pseudonimem obecnym w Bouncy. Naprawiono błąd Bouncy Castle, który używał '' SHA256 "' w jednym z pakietów protokołu Bouncy, zamiast '' SHA-256 "', który był standardową nazwą w JCE. Jest to niebezpieczeństwo zaakceptowania czegoś więcej niż absolutne minimum - działa w jedną stronę, ale nie w drugą. –

+1

Więc, co robisz, gdy "gwarantowana" MD5 zawiedzie. W Oracle JRE, ale tylko na niektórych maszynach, a nie innych ... To mnie teraz zaskoczyło. :-( –

+0

Czy sprawdziłeś swoich dostawców zabezpieczeń? –

Powiązane problemy