kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 Greg
Greg
Вопрос

Как сделать PGP в Python (генерировать ключи, шифровать/дешифровать)

Я делаю программу на Python для распространения среди пользователей windows с помощью инсталлятора.

Программа должна иметь возможность каждый день скачивать файл, зашифрованный открытым ключом пользователя, а затем расшифровывать его.

Поэтому мне нужно найти библиотеку Python, которая позволит мне генерировать открытый и закрытый ключи PGP, а также расшифровывать файлы, зашифрованные открытым ключом.

Может ли это сделать pyCrypto (документация туманна)? Есть ли другие чистые библиотеки Python? Как насчет автономного инструмента командной строки на любом языке?

До сих пор я видел только GNUPG, но его установка на Windows приводит к изменениям в реестре и повсюду разбрасывает dll, а затем мне приходится беспокоиться о том, установлено ли это у пользователя, как сделать резервную копию существующих брелоков и т.д. Я бы предпочел просто иметь библиотеку python или инструмент командной строки и управлять ключами самостоятельно.

Обновление: pyME может работать, но он, похоже, не совместим с Python 2.4, который я должен использовать.

31 2009-06-19T22:28:46+00:00 6
 dreftymac
dreftymac
Редактировал вопрос 25-го апреля 2018 в 7:36
Программирование
encryption
pgp
python
gnupg
public-key-encryption
Решение / Ответ
Vinay Sajip
Vinay Sajip
27-го июня 2009 в 10:12
2009-06-27T22:12:35+00:00
Дополнительно
Источник
Редактировать
#9181391

Вы Don'т нужна PyCrypto " или " PyMe, хотя эти пакеты могут быть - вы будете иметь всевозможные проблемы со сборкой под Windows. Вместо этого, почему бы не избежать кролика-отверстия и делать то, что я сделал? Используйте ключей GnuPG 1.4.9. Вы Don'т нужно сделать полную установку на машинах конечных пользователей - просто gpg.exe и iconv.dll` из дистрибутива достаточно, и вы просто должны иметь их где-нибудь в пути или доступ из Python-кода, используя полный путь. Внесение изменений в реестр, и все (исполняемых файлов и файлов данных) может быть помещен в одну папку, если вы хотите.

Там'ы модуль GPG.py которым изначально была написана Эндрю Kuchling, улучшенная Ричард Джонс и усовершенствовать Стив Трауготт. Это'ы [здесь][1], но как-это Это's не подходит для Windows, потому что это используетОС.вызов Fork(). Хотя изначально частьPyCrypto, **он является полностью независимым от других частейPyCrypto и только gpg.exe/iconv.dll для того, чтобы работать**.

У меня есть версия (gnupg.py) происходит от Трауготт'ы GPG.py, которая использует модуль подпроцесс`. Она отлично работает под Windows, по крайней мере для моих целей - я использую его, чтобы сделать следующее:

  • Управление ключами - генерация, листинг, экспорт и т. д.
  • Ключи импорт из внешнего источника (например, открытые ключи, полученные от компании-партнера)
  • Шифровать и дешифровать данные
  • Подписывать и проверять подписи

Модуль я'ве есть, это не идеально, чтобы показать прямо сейчас, потому что она включает в себя некоторые другие вещи, которые должны'т быть там - значит, я могу'т освободить его как есть на данный момент. В какой-то момент, возможно, в ближайшие пару недель, я надеюсь, что смогу привести в порядок его, добавить некоторые модульные тесты (я не'Т есть какие-либо тесты для подписания/проверки подписи, например) и отпустите его (либо под оригинал PyCrypto лицензии или подобных коммерческих лицензий). Если вы можете't ждать, идти с Трауготт's модуль и самостоятельно его модифицировать - это было'т слишком много работы, чтобы сделать его работу с модулемподпроцесс`.

Этот подход был намного менее болезненным, чем другие (например, глотокна основе решений, или решений, которые требуют построения с помощью MinGW/префикса msys), который я считал и экспериментировал с. Я'вэ использовал тот же подход (gpg.exe/iconv.dll) с системами, написанными на других языках, например, с# с не менее безболезненных результатов.

P. S. Это работает с Python 2.4, а также в Python 2.5 и выше. Не проверял с другими версиями, но я Дон'т вижу никаких проблем.

Vinay Sajip
Vinay Sajip
Редактировал ответ 27-го июня 2009 в 10:23
28
0
Roee Anuar
Roee Anuar
10-го октября 2017 в 11:41
2017-10-10T11:41:13+00:00
Дополнительно
Источник
Редактировать
#9181393

После много копания, я нашел пакет, который работал для меня. Хотя говорят, что поддерживают генерацию ключей, я не't-тест это. Однако мне удалось расшифровать сообщение, зашифрованное с помощью открытого ключа GPG. Преимущество этого пакета заключается в том, что он не требует исполняемый файл GPG на машине, и питон основе реализации стандарта OpenPGP (а не обертка вокруг исполняемый). Я создал приватные и публичные ключи через программе Gpg4win и Клеопатра для Windows См. мой код ниже.

import pgpy
emsg = pgpy.PGPMessage.from_file(<path to the file from the client that was encrypted using your public key>)
key,_  = pgpy.PGPKey.from_file(<path to your private key>)
with key.unlock(<your private key passpharase>):
    print (key.decrypt(emsg).message)

Хотя вопрос очень старый. Я надеюсь, что это помогает будущим пользователям.

Roee Anuar
Roee Anuar
Редактировал ответ 18-го октября 2017 в 6:58
9
0
 Jon
Jon
24-го июня 2009 в 8:30
2009-06-24T08:30:10+00:00
Дополнительно
Источник
Редактировать
#9181388

PyCrypto поддерживает PGP - хотя вы должны протестировать его, чтобы убедиться, что он работает в соответствии с вашими спецификациями.

Хотя документацию трудно найти, если вы просмотрите Util/test.py (тестовый скрипт модуля), вы можете найти элементарный пример поддержки PGP:

if verbose: print '  PGP mode:',
obj1=ciph.new(password, ciph.MODE_PGP, IV)
obj2=ciph.new(password, ciph.MODE_PGP, IV)
start=time.time()
ciphertext=obj1.encrypt(str)
plaintext=obj2.decrypt(ciphertext)
end=time.time()
if (plaintext!=str):
    die('Error in resulting plaintext from PGP mode')
print_timing(256, end-start, verbose)
del obj1, obj2

Кроме того, в файле PublicKey/pubkey.py предусмотрены следующие соответствующие методы:

def encrypt(self, plaintext, K)
def decrypt(self, ciphertext):
def sign(self, M, K):
def verify (self, M, signature):
def can_sign (self):
    """can_sign() : bool
    Return a Boolean value recording whether this algorithm can
    generate signatures.  (This does not imply that this
    particular key object has the private information required to
    to generate a signature.)
    """
    return 1
7
0
Alex Martelli
Alex Martelli
24-го июня 2009 в 4:03
2009-06-24T16:03:44+00:00
Дополнительно
Источник
Редактировать
#9181389

PyMe действительно заявляет о полной совместимости с Python 2.4, и я цитирую:

Последняя версия PyMe (по состоянию на данный момент написания) - v0.8.0. Его бинарный дистрибутив для Debian был скомпилирован с помощью SWIG v1.3.33 и GCC v4.2.3 для GPGME v1.1.6 и Python v2.3.5, v2.4.4, и v2.5.2 (предоставлен в 'нестабильном' дистрибутиве на тот момент). Его бинарный дистрибутив для Windows был скомпилирован с помощью SWIG v1.3.29 и MinGW v4.1 для GPGME v1.1.6 и Python v2.5.2 (хотя тот же самый бинарник > устанавливается и работает нормально. установился и прекрасно работает в v2.4.2 как хорошо).

Я не совсем понимаю, почему вы говорите "он не кажется совместимым с Python 2.4, который я должен использовать" - уточните, пожалуйста?

И да, он существует как полупитоновская (SWIGd) обертка на GPGME - это популярный способ разработки расширений Python после того, как у вас есть библиотека на C, которая в основном выполняет свою работу.

PyPgp имеет гораздо более простой подход - вот почему это один, простой Python скрипт: в основном он делает не более чем "shell out" для команд команд командной строки PGP. Например, расшифровка - это просто:

def decrypt(data):
    "Decrypt a string - if you have the right key."
    pw,pr = os.popen2('pgpv -f')
    pw.write(data)
    pw.close()
    ptext = pr.read()
    return ptext

т.е. записать зашифрованный шифротекст на стандартный вход команды pgpv -f, прочитать стандартный вывод pgpv'как расшифрованный открытый текст.

PyPgp - тоже очень старый проект, хотя его простота означает, что заставить его работать с современным Python (например, subprocess вместо ныне устаревшего os.popen2) будет несложно. Но вам все еще нужен установленный PGP, иначе PyPgp ничего не сделает;-).

3
0
Heikki Toivonen
Heikki Toivonen
25-го июня 2009 в 4:10
2009-06-25T04:10:59+00:00
Дополнительно
Источник
Редактировать
#9181390

В M2Crypto есть модуль PGP, но я никогда не пытался его использовать. Если вы попробуете, и это сработает, пожалуйста, дайте мне знать (я текущий сопровождающий M2Crypto). Некоторые ссылки:

  • Исходники модуля
  • демонстрационный скрипт
  • модульные тесты

Обновление: Модуль PGP не предоставляет способов генерации ключей, но предположительно они могут быть созданы с помощью модулей более низкого уровня RSA, DSA и т.д.. Я не знаю PGP изнутри, так что вам придется покопаться в деталях. Также, если вы знаете, как генерировать их с помощью команд командной строки openssl, то преобразовать их в вызовы M2Crypto должно быть достаточно легко.

Heikki Toivonen
Heikki Toivonen
Редактировал ответ 26-го июня 2009 в 7:08
3
0
Marc  Mutz - mmutz
Marc Mutz - mmutz
31-го июля 2009 в 6:26
2009-07-31T18:26:43+00:00
Дополнительно
Источник
Редактировать
#9181392

Как другие уже отметили, PyMe является каноническим решением для этого, поскольку он's на основе GpgME, который является частью экосистемы, что GnuPG.

Для Windows, я настоятельно рекомендую использовать программе Gpg4win как распределение ключей GnuPG, по двум причинам:

Это's на основе GnuPG версии 2, в котором, среди прочего, включает в себя gpg2.exe, который может (наконец, я могу добавить :) началоgpg-agent.exe по требованию (Гоб В1.X может'т).

А во-вторых, он'ы только официальные сборки Windows разработчики с GnuPG. Е. Г. это'ы полностью кросс-компиляции под Linux для Windows, поэтому не на йоту несвободных программ был использован при его подготовке (достаточно важно для безопасности :).

3
0
Похожие сообщества 38
Python beginners
Python beginners
17 345 пользователей
Вопросы про Python для чайников. Cпам и троллинг неприемлем. Частозадаваемые вопросы: https://github.com/ru-python-beginners/faq/blob/master/README.md Правила группы: https://t.me/ru_python_beginners/1649981
Открыть telegram
Python
Python
14 260 пользователей
Уютный чат для профессионалов, занимающихся поиском питоньих мудростей. Как не получить бан: https://t.me/ru_python/1961404
Открыть telegram
🐍 Python Stepik Chat
🐍 Python Stepik Chat
11 673 пользователей
Этот уютный чат создан для помощи в решение задач на прекрасном курсе "Поколение Python: курс для начинающих" и не только. Правила: https://t.me/pythonstepikchat/619142 Чат для оффтопа - t.me/+fqNb78zlQY81NGUy Наш канал - @kimport_this
Открыть telegram
pgsql – PostgreSQL
pgsql – PostgreSQL
9 892 пользователей
Чат русскоязычного сообщества PostgreSQL, здесь мы обсуждаем технические вопросы, для поиска работы и предложения вакансий есть группа https://t.me/pgsqljobs For English discussion visit https://t.me/pg_sql
Открыть telegram
aiogram
aiogram
8 250 пользователей
Репозиторий: https://github.com/aiogram/aiogram Сайт: https://aiogram.dev Полезная информация: https://t.me/aiogram_ru/1421485?thread=1421477
Открыть telegram
Python — вакансии и аналитика
Python — вакансии и аналитика
6 459 пользователей
Публикуем вакансии и запросы на поиск работы по направлению Python, Flask и т.д. Здесь всё: full-time, part-time, remote и разовые подработки. См. также: @golang_jobs, @qa_jobs, @devops_jobs, @javascript_jobs, @nodejs_jobs, @uiux_jobs, @products_jobs
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 6 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
JA
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией