Спрашивая, как метод KeyPairGenerator.initialize()
принимает пример SecureRandom
, который стоит дорого инициализировать. Java Doc ничего не говорит о том, что он является потокобезопасным. Все, что я могу найти, это a comment in the source code. Может быть, это зависит от фактического экземпляра KeyPairGenerator
? Кстати, я использую экземпляр Sun RSA.Является ли KeyPairGenerator.generateKeyPair() потоком безопасным?
ответ
Это зависит от фактического экземпляра созданного, neurite, как вы догадались. Важно отметить, что класс KeyPairGenerator является абстрактным, а реализация подклассов переопределяет метод generateKeyPair. Таким образом, авторы абстрактного класса KeyPairGenerator не могут утверждать, что он потокобезопасен. Все, что они могут сделать, это убедиться, что они ничего не сделали, чтобы поставить под угрозу безопасность потоков.
Стандартный способ получения KeyPairGenerator с использованием статического метода getInstance возвращает экземпляр класса, производного от KeyPairGenerator: см. Класс KeyPairGenerator.Delegate. Его реализация generateKeyPair также не делает ничего, чтобы поставить под угрозу безопасность потоков, поэтому, если вы получите свой KeyPairGenerator таким образом, вы в порядке †. Но вы также можете получить KeyPairGenerator так:
KeyPairGenerator kpg=new KeyPairGenerator("RSA"){
@Override
public KeyPair generateKeyPair(){
return doSomethingThatIsntThreadSafe();
}
};
Теперь, конечно, вы бы никогда не сделал этого, но авторы KeyPairGenerator не могут знать, что, таким образом, они не могут сказать вам, что любой экземпляр KeyPairGenerator является потокобезопасным.
† где штраф означает, что в зависимости от вашей криптографии SPI, чтобы сделать правильную вещь!
- 1. Является ли console.writeline потоком безопасным?
- 2. Является ли com.google.cloud.datastore.Datastore потоком безопасным?
- 3. Является ли org.exolab.castor.xml.schema.Schema потоком безопасным?
- 4. Является ли HttpApplicationState.RemoveAll() потоком безопасным?
- 5. Является ли Bootstrap.connect потоком безопасным?
- 6. Является ли UImage.AsPNG() потоком безопасным?
- 7. Является ли org.joda.time.DateTimeFormat потоком безопасным?
- 8. Является ли Task.ContinueWith потоком безопасным?
- 9. Является ли LIBSVM потоком безопасным
- 10. Является ли Trace.WriteLine потоком безопасным?
- 11. Является ли AndroidHttpClient потоком безопасным
- 12. Является ли SoapHttpClientProtocol потоком безопасным?
- 13. Является ли RNGCryptoServiceProvider.GetBytes потоком безопасным?
- 14. Является ли sun.misc.Unsafe безопасным потоком?
- 15. Является ли Component.getGraphicsConfiguration потоком безопасным?
- 16. Является ли Socket.SendAsync потоком безопасным?
- 17. Является ли shutil.make_archive потоком безопасным?
- 18. Является ли Queue.Peek потоком безопасным?
- 19. Является ли Hashtable.entrySet() потоком безопасным?
- 20. Является ли org.springframework.jms.support.converter.MappingJackson2MessageConverter потоком безопасным?
- 21. Является ли System.Runtime.Serialization.DataContractSerializer потоком безопасным?
- 22. Является ли Spring mongoTemplate потоком безопасным?
- 23. Является ли AddOrUpdate безопасным потоком в ConcurrentDictionary?
- 24. Является ли armadillo решающим() потоком безопасным?
- 25. Является ли Interop.Domino dll потоком безопасным?
- 26. Java: Является ли этот подход потоком безопасным?
- 27. Является ли этот метод потоком безопасным?
- 28. C# Является ли этот метод потоком безопасным?
- 29. Является ли это «двойной + =» потоком безопасным?
- 30. Является ли следующий объект потоком безопасным?
Исходный код, который вы нашли, кажется, содержит ваш ответ – ControlAltDel
* Может быть * == безопасно предположить, «мы не знаем»? – hd1