2012-01-05 4 views
3

Я пишу коммуникационную программу на C, и я ищу лучший способ использовать шифрование GnuPG. Я уже использую симметричные алгоритмы шифрования через библиотеку mcrypt, но хочу включить некоторые возможности с открытым ключом, предпочтительно используя GnuPG, если это возможно. Есть ли доступная библиотека для этого? Было бы лучше попытаться напрямую взаимодействовать с GPG непосредственно через программу, чтобы выполнить это? Любое понимание было бы оценено, поскольку я хотел бы, чтобы эта реализация была максимально чистой. Благодарю.Использование GPG с C?

ответ

4

К сожалению, GnuPG предназначен для использования в интерактивном режиме, а не как API.

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

Если возможности открытого ключа в целом - это то, что вы ищете, GnuTLS - это API для использования в сетевых программах, которые обеспечивают именно то, что вы хотите. Он пользуется большой поддержкой и предоставляет возможности шифрования с открытым ключом SSL и TLS.

Однако, если вы настроены на использование GPG, GPGME - это проект, который существует для обертки API вокруг GPG. Я не использовал его и не могу советовать о его использовании, но подозреваю, что он может быть несколько вынужденным.

2

GPGme действительно official API for GPG и проста в использовании и хорошо документированы (примеры в тестах/GPG очень полезны)

Вот пример для шифрования для John Smith:

gpgme_data_t clear_text, encrypted_text; 
gpgme_key_t recipients[2] = {NULL, NULL}; 
     /* The array must be NULL-terminated */ 
... 
error = gpgme_op_keylist_start(context, "John Smith", 1); 
error = gpgme_op_keylist_next(context, &recipients[0]); 
... 
error = gpgme_op_encrypt(context, recipients, 
       GPGME_ENCRYPT_ALWAYS_TRUST, 
          clear_text, encrypted_text); 
Смежные вопросы