2013-03-03 2 views
8

Кто-нибудь знает хорошую реализацию для зашифрованных C++ потоков с использованием OpenSSL? Что-то, что расширяет или обертывает std :: istream и std :: ostream?Зашифрованные потоки OpenSSL

Я знаю, что это можно сделать с помощью boost (фильтрационного потока), но я не хочу включать boost только для этого. Какие-либо дополнительные предложения?

+2

Если вы добавляете зависимость в любом случае, что случилось с повышением? – rhashimoto

+0

Да, это кажется странным. Вы хотите добавить OpenSSL в качестве зависимости *, а также * некоторую другую неопределенную зависимость, которая обертывает первое в потоке C++. Итак ... почему эта неопределенная зависимость не может быть библиотекой Boost? – jalf

+0

@jalf: OpenSSL уже добавлен как зависимость. Я хочу избежать использования boost из-за уже огромного времени компиляции. Если я захочу использовать boost, мне все равно придется его обернуть и реализовать фактические фильтры. Это можно сделать, но мне хотелось бы что-то получше. – Ha11owed

ответ

1

Я натолкнулся на следующие реализации, используя std :: istream и std :: ostream.

  1. AES CTR режим шифрования/дешифрования

http://openssl.6102.n7.nabble.com/EVP-Decrypt-Final-ex-fails-on-larger-files-td2434.html

  1. Blowfish

http://openssl.6102.n7.nabble.com/EVP-Decrypt-Final-ex-fails-on-larger-files-td2434.html

Кроме того, вы также можете посмотреть здесь:

http://www.appinf.com/docs/poco/Poco.Crypto.RSAKeyImpl.html

и здесь:

https://dev.marc.waeckerlin.org/projects/libpcscxx/browser/trunk/src/openssl.hxx?rev=60

+0

К сожалению, ваши ссылки не показывают, как обернуть std :: istream и std :: ostream, они показывают только, как использовать их в качестве входных и выходных данных для метода шифрования-дешифрования. – Ha11owed

+0

Я хочу обернуть потоки, чтобы дешифрование/шифрование можно было сделать прозрачно с помощью моего приложения без использования временного файла или фрагмента временной памяти. – Ha11owed

1

Если вы хотите сделать это самостоятельно:

Подкласс std :: streambuf для использования с TCP или SSL (они в основном работают одинаково после открытия сокета. Затем вы можете сделать std :: istream и std :: ostream, используя этот streambuf. Если вы не хотите std :: iostream, вы можете создать два streambufs, один для ввода и один для вывода.

станд :: streambuf документы (в основном просто сосредоточиться на переполнения и опустошения): http://www.cplusplus.com/reference/streambuf/streambuf/

и небольшой учебник о том, как использовать libssl непосредственно.

http://www.ibm.com/developerworks/linux/library/l-openssl/index.html

+0

+1 Потому что это близко к тому, чего я хочу достичь. Мне кажется, что это опасно для меня, я раньше не реализовал что-то подобное, и многие из виртуальных методов, которые мне нужно реализовать, а не только переполнение и недополнение, для меня немного загадочны. – Ha11owed

+0

Стоит делать хотя бы один раз. В основном, вы можете узнать, как работают потоковые функции stdlib. Документация относительно проста. –