openpgp的python实现

py-pgp的Python项目详细描述


https://travis-ci.org/SkierPGP/python-pgp.svg?branch=masterhttps://coveralls.io/repos/SkierPGP/python-pgp/badge.png

摘要

python pgp的目标是在python中重现gnupg的全部功能。 它还可用于创建原始openpgp包和包流 用于测试目的。对某些人来说,这可能是一个重量级的解决方案 目的。

这是原始库的一个分支-原始库似乎没有活动和/或有一个pypi包。

替代方案

提供相关功能的其他python包:

  • pyassuan-通信 使用gnupg的socket协议。
  • pgpdump-一条纯Python 用于分析OpenPGP数据包的库。
  • gnupg-在 gnupg可执行文件。
  • python-gnupg-另一个 gnupg可执行文件的包装器。
  • gpgkeys-另一个包装 关于gnupg可执行文件。
  • gpglib-一条纯Python 用于分析OpenPGP数据包和解密消息的库。
  • OpenPGP-未维护的 纯python库,具有旧版本的许多功能 格努普的。
  • encryptedfile-a页 纯python库,用于在 openpgp兼容方式。
  • PGPy-一条纯Python 具有OpenPGP数据包的基本解析和签名的库。
  • OpenPGP-Python-a页 纯python端口 openpgp-php。它可以 分析OpenPGP数据包并验证并创建签名。

系统要求

  • 基本构建

对于双鱼支持

  • libtwofish dev

安装

pip install pgp

支持双鱼功能:

pip install pgp[twofish]

支持茶花:

pip install pgp[camellia]

支持两种鱼类和茶花:

pip install pgp[camellia,twofish]

用法

高水平

分析消息
from pgp import read_message
message = read_message(data)

分析可传输密钥
from pgp import read_key
key = read_key(data)

加载gnupg数据库
from pgp import get_gnupg_db
db = get_gnupg_db()
key = db.search(user_id='Joe')[0]

从密钥服务器检索密钥并为其创建消息

>>> import datetime
>>> from pgp import *
>>> from pgp.keyserver import get_keyserver
>>> ks = get_keyserver('hkp://pgp.mit.edu/')
>>> results = ks.search('Joe Bloggs')
>>> recipient_key = results[0].get()
>>> message = message.TextMessage(
...     u"This message was encrypted using Python PGP",
...     datetime.datetime.now())
>>> my_secret_key = read_key_file('secret_key.gpg')
>>> my_secret_key.unlock('My passphrase')
>>> message = message.sign(my_secret_key)
>>> message = message.compress(2)  # Compression algorithm 2
>>> message = message.public_key_encrypt(9, recipient_key)
>>> message_packets = message.to_packets()
>>> message_data = b''.join(map(bytes, message_packets))
>>> armored_message = armor.ASCIIArmor(
...     armor.PGP_MESSAGE, message_data)
>>> file_handle = open('message.asc', 'w')
>>> file_handle.write(str(armored_message))
>>> file_handle.close()

低水平

分析数据包流
from pgp.packets import parsers
parsers.parse_binary_packet_data(packet_data)

序列化数据包
from pgp.packets import parsers
packets = parsers.parse_binary_packet_data(packet_data)
b''.join(map(bytes, packets))

安全性

如果您使用此包处理私钥数据和 解密,请注意目前没有(合理的)方法 python来安全地删除内存,并且经常复制一些东西 以不明显的方式。如果你担心关键数据 由于内存泄漏,请不要使用此包进行处理 密钥数据。另一方面,“如果你的记忆 我认为您的安全设置有问题。”

openpgp使用压缩算法。提供不受信任的数据时要小心 进入这个图书馆 Zip bomb或类似的否认 服务攻击。

开发

这个包的主存储库是on GitHub。在包装上开发 安装开发依赖项,克隆存储库并安装 “开发”附加功能。

git clone git@github.com:mitchellrj/python-pgp.git
cd python-pgp
virtualenv .
bin/pip install -e ".[dev]"

运行测试

bin/python setup.py nosetests

建筑文档

bin/python setup.py build_sphinx

许可证

版权所有(c)2014 Richard Mitchell

此程序是免费软件:您可以重新分发和/或修改 根据由 自由软件基金会,或者许可证的第3版,或者 (由您选择)任何更高版本。

这个程序的发布是希望它能有用, 但没有任何保证;甚至没有 适销性或适合某一特定目的的适销性。见 GNU通用公共许可证了解更多详细信息。

你应该收到GNU通用公共许可证的副本 沿着用这个程序。如果没有,请参见<;http://www.gnu.org/licenses/>;。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在java中模拟按键?   尽管元素存在,但HtmlUnit中的java ElementNotFoundException   在Java中,长双精度并发写入不是原子的吗?   java如何在另一个对象数组中打印对象的int值?   java在显示或更改视图后执行一些代码   java JFR:读取时发生OutOfMemoryError。jfr文件   java Android助手检查是否购买   java这种设计模式的好处是什么?   Weblogic 10.3中针对托管服务器的java部署问题   java如何获取字符串。在编译时投诉的格式   声明字符串数组时发生java错误   java JPA在多个并行线程中从表中删除时发生死锁   java Android:在按钮动画之后启动活动   java并发与JMS主题在春季   使用Lucene spatial search/DateRangePrefixTree进行java日期范围查询?   java可选接口问题   JavaDbUnit没有在每个方法之后清洗和插入数据库,所以测试不是独立的   java在IAIK PKCS11包装器中一对私钥和证书如何匹配?