2013-03-03 15 views
8

Czy ktoś zna dobrą implementację szyfrowanych strumieni C++ przy użyciu OpenSSL? Coś, co rozciąga się lub owija std :: istream i std :: ostream?Szyfrowane strumienie OpenSSL

Wiem, że można to zrobić z doładowaniem (filtrującym strumieniem), ale nie chcę w tym celu dodawać doładowania. Jakieś sugestie niezwalające?

+2

Jeśli dodajesz zresztą zależność, co się dzieje z doładowania? – rhashimoto

+0

Tak, to wydaje się dziwne. Chcesz dodać OpenSSL jako zależność, * jak również * inną nieokreśloną zależność, która owija ją w strumień C++. Więc ... dlaczego ta nieokreślona zależność nie może być biblioteką Boost? – jalf

+0

@jalf: OpenSSL jest już dodany jako zależność. Nie chcę używać boostu z powodu ogromnego czasu kompilacji. Jeśli zdecyduję się użyć boost, nadal będę musiał go zawinąć i zaimplementować rzeczywiste filtry. Można to zrobić, ale chciałbym czegoś lepszego. – Ha11owed

Odpowiedz

1
+0

Niestety, twoje łącza nie pokazują jak owijać std :: istream i std :: ostream, pokazują tylko, jak używać ich jako wejścia i wyjścia dla metody szyfrowania-deszyfrowania. – Ha11owed

+0

Chcę zawinąć strumienie tak, aby odszyfrowywanie/szyfrowanie mogło być wykonywane przezroczysto przez moją aplikację bez konieczności korzystania z pliku tymczasowego lub tymczasowej porcji pamięci. – Ha11owed

1

Jeśli chcesz zrobić to sam:

Podklasa std :: streambuf do użycia z TCP lub SSL (w zasadzie działają tak samo, gdy gniazdo jest otwarte. Następnie możesz użyć std :: istream i std :: ostream używając tego streaguf. Jeśli nie chcesz std :: iostream, możesz utworzyć dwa streambufs, jeden dla wejścia i jeden dla wyjścia.

std :: streambuf docs (przeważnie po prostu skupić się na przepełnienie i niedomiar): http://www.cplusplus.com/reference/streambuf/streambuf/

i mały tutorial jak korzystać bezpośrednio libssl.

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

+0

+1 Ponieważ jest to zbliżone do tego, co chcę osiągnąć. Wydaje mi się to niebezpieczne, nie wdrożyłem czegoś podobnego wcześniej, a wiele wirtualnych metod, które musiałbym wdrożyć, a nie tylko przepełnienie i niedopełnienie, jest dla mnie trochę zagadkowe. – Ha11owed

+0

Warto zrobić co najmniej raz. Głównie po to, aby dowiedzieć się, jak działają funkcje strumieniowe stdlib. Dokumentacja jest stosunkowo prosta. –