Является ли openssl's BF_cfb64_encrypt() потоком безопасным?openssl BF_cfb64_encrypt thread-safety
Образец кода, чтобы использовать его для шифрования/дешифрования капли данных, будет высоко оценен.
Является ли openssl's BF_cfb64_encrypt() потоком безопасным?openssl BF_cfb64_encrypt thread-safety
Образец кода, чтобы использовать его для шифрования/дешифрования капли данных, будет высоко оценен.
Согласно FAQ, процедуры OpenSSL являются потокобезопасными. Я посмотрел на источник этой функции, и он действительно выглядит потокобезопасным. Конечно, предполагается, что вы не передаете одни и те же входные/выходные буферы функции на разные потоки.
Для примера обращения к нему вы можете посмотреть в источнике OpenSSL. Существует файл с именем bftest.c, расположенный в openssl/crypto/bf /, который имеет тестовые вызовы функции.
Редактировать Подумав об этом немного больше, возможно, все же разумно использовать функциональность CRYPTO_set_locking_callback для многопоточной блокировки. Алгоритм Blowfish, о котором спрашивается в исходном вопросе, в настоящее время (в версии OpenSSL, который я использую), не использует эти блокировки, но это не гарантирует, что в будущем по какой-то причине это не произойдет. Плюс это спасает будущую боль, если вы в конечном итоге используете функциональность (например, RAND_bytes), которая нуждается в этих блокировках.
Thanks Mark Я был смущен URL http://www.openssl.org/docs/crypto/threads.html Любая идея, о чем идет речь. Также я был любопытным, чтобы узнать, что такое EVP? –
Если ваш код использует несколько потоков с общими ресурсами, то OpenSSL будет использовать обратный вызов, определенный CRYPTO_set_locking_callback для получения/освобождения блокировок. Он очень прост в использовании (пример находится в файле crypto/threads/mttest.c. В основном он позволяет указать функцию обратного вызова, которая вызывает функцию блокировки, подходящую для платформы (например, WaitForSingleObject в win32). не считаю, что BF_cfb64_encrypt нуждается в этой функции.Я посмотрел на код и не вижу вызовов для блокировок. С другой стороны, это, вероятно, было бы хорошо, поскольку будущие версии могут получить блокировки. –
Я еще не знаком с библиотекой EVP. Это интерфейс высокого уровня, который, по-видимому, обеспечивает уровень абстракции над функциями более низкого уровня. Если вы используете функции более высокого уровня, я думаю, ваше приложение будет более защищено от изменений в базовых функциях. –