C/С++ шифрование/дешифрование с помощью открытого ключа
Я ищу две функции, концептуально похожие на них:
// 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*
, a std::string
или что-то легко конвертируемое в эти два. И где public_key
и private_key
могут быть в основном любыми, от ключей, сгенерированных с помощью некоторых команд (gpg/ssl stuff или любого другого), к ключам, сгенерированным с помощью других простых функций.
Я просмотрел несколько библиотек криптографии (libgcrypt, libgpgme, openssl...), но совсем не просто реализовать такие функции с этими библиотеками: им нужны не поверхностные знания об асимметричном шифровании и много кода.
В любом случае эта задача не кажется необычной.
Как реализовать две функции выше?
Ответы
Ответ 1
К сожалению, шифрование всегда требует не поверхностного знания об используемых алгоритмах. Трудно поправиться. "Справочник по прикладной криптографии" является относительно читаемым руководством по различным доступным алгоритмам, поэтому, вероятно, стоит посмотреть.
Вы также можете попробовать cryptlib. Кажется, у него хорошо продуманный дизайн, который дает вам разумные значения по умолчанию для множества параметров, поэтому вы можете, надеюсь, начать, не беспокоясь о деталях.
Ответ 2
Когда кто-то просит упростить шифрование, я могу только рекомендовать KeyCzar.
Он не только обеспечивает чистый интерфейс на нескольких языках (которые могут использовать одни и те же клавиши), но также механизмы для обработки поворотов клавиш и т.п.
И, конечно же, безопасные значения по умолчанию для реализованных алгоритмов, поэтому вам не нужно беспокоиться о технических деталях.
Действительно, лучшее удобное и безопасное сочетание, которое я видел до сих пор.
Ответ 3
Предполагая, что вам не нужна какая-то агностическая платформа, Cryptography Next Generation (CNG) является относительно новым криптографическим API в Windows и удивительно интуитивно понятна и проста в использовании. Я написал статью, в которой представлены примеры всех основных криптографических операций, которые могут понадобиться в типичных приложениях. Пример кода для статьи также дает полный рабочий пример для этих операций с использованием компилятора Visual С++.
http://msdn.microsoft.com/en-us/magazine/cc163389.aspx
Для обработки открытых и закрытых ключей в виде строк вы можете просто использовать Base64 или аналогичную кодировку.