C / C ++ шифрование / дешифрование с открытым ключом - PullRequest
13 голосов
/ 08 ноября 2010

Я ищу две функции, концептуально подобные этим:

// returns the encrypted text
string encrypt( string public_key, string pass_phrase, string text );
// returns the original text
string decrypt( string private_key, string pass_phrase, string encrypted_text );

, где string может быть char*, std::string или чем-то легко конвертируемым для этих двух. И где public_key и private_key могут быть в основном чем угодно, от ключей, сгенерированных некоторыми командами (gpg / ssl или что-то еще), до ключей, сгенерированных с помощью других простых функций.

Я изучил несколько библиотек криптографии (libgcrypt, libgpgme, openssl ...), но реализовать такие функции с этими библиотеками непросто: им требуются поверхностные знания об асимметричном шифровании и много кода.

В любом случае, это задание не кажется необычным. Как я могу реализовать две функции выше?

Ответы [ 3 ]

7 голосов
/ 08 ноября 2010

К сожалению, шифрование всегда требует поверхностного знания используемых алгоритмов.Трудно получить права.«Справочник по прикладной криптографии» представляет собой относительно читаемое руководство по различным доступным алгоритмам, поэтому, вероятно, стоит взглянуть на него.Кажется, он имеет хорошо продуманную конструкцию, которая дает разумные значения по умолчанию для большого количества параметров, поэтому можно надеяться, что можно начать работу, не беспокоясь о деталях.

5 голосов
/ 08 ноября 2010

Когда кто-то просит простого шифрования, я могу рекомендовать только KeyCzar .

Он обеспечивает не только чистый интерфейс на нескольких языках (который может использовать одни и те же ключи), но также и механизмы для обработки поворотов клавиш и т.п.

И, конечно, безопасные настройки по умолчанию для реализованных алгоритмов, чтобы вам не приходилось беспокоиться о технических деталях.

Действительно, лучшая простая и безопасная комбинация, которую я видел до сих пор.

0 голосов
/ 08 ноября 2010

Предполагая, что вам не нужно что-то не зависящее от платформы, Cryptography Next Generation (CNG) - это относительно новый криптографический API для Windows, удивительно интуитивно понятный и простой в использовании. Я написал статью, в которой приведены примеры всех основных криптографических операций, которые вам могут понадобиться в типичных приложениях. Пример кода для статьи также предоставляет полный рабочий пример для этих операций с использованием компилятора Visual C ++.

http://msdn.microsoft.com/en-us/magazine/cc163389.aspx

Чтобы рассматривать открытый и закрытый ключи как строки, вы можете просто использовать Base64 или аналогичную кодировку.

...