创建TrueLicense许可文件的Python库。

truep的Python项目详细描述


与TrueLicense兼容的Python许可证管理器

这个包支持管理许可证一种java包使用的格式 TrueLicense。只有版本1格式是 支持。

有关 许可证格式,或下面的Quick license format description

快速许可证格式说明

许可证在时间上有一个有效期,一个颁发者,一个持有者和各种元 数据。

由持证人签名,可由发卡机构验证签名 证书。

许可证文件也使用从密码派生的密钥进行加密。

快速库参考

truepy导出的主类是truepy.License

  • 要生成新许可证,请使用类方法truepy.License.issue
  • 要从文件或流加载许可证,请使用Class方法 truepy.License.load
  • 要将许可证保存到文件或流,请使用以下方法 truepy.License.store
  • 要验证许可证的签名,请使用以下方法 truepy.License.verify
  • 要读取许可证信息,请使用truepy.License.license_data 属性;这是类型truepy.LicenseData

加载和存储许可证只需要许可证密码;这些 操作不执行签名和签名验证。

颁发新许可证需要颁发者证书的私钥。

验证许可证签名需要颁发者证书。

快速应用参考

有关详细信息,请使用python -m truepy -h运行应用程序。

使用量

本节介绍如何将系统配置为使用truepy

配置包括安装truepy,生成颁发者证书, 生成许可证并验证许可证。

安装

要安装truepy,请运行以下命令:

pip install truepy

生成颁发者证书

此功能不包含在truepy中。建议使用的工具是 OpenSSL。颁发证书并生成 私钥,运行以下命令:

openssl req -x509 \
    -newkey rsa:4096 \
    -keyout key.pem \
    -out certificate.pem \
    -days $VALIDITY

这将提示您输入密码以保护私钥,以及其他 证书中包含的信息。

最重要的信息是密码,您需要 稍后,还有$VALIDITY。命令行参数-days传递给 openssl确定证书有效的天数。一定不要 设置一个太低的值,因为在此之后您将无法使用证书 已经过去的天数。

颁发许可证

一旦您拥有证书和私钥,就可以开始颁发许可证。 下面的代码显示了所需的最低步骤:

from cryptography.hazmat import backends
from cryptography.hazmat.primitives import serialization

from truepy import LicenseData, License


# Load the certificate
with open('certificate.pem', 'rb') as f:
    certificate = f.read()

# Load the private key
with open('key.pem', 'rb') as f:
    key = serialization.load_pem_private_key(
        f.read(),
        password=b'MySecretPassword',
        backend=backends.default_backend())

# Issue the license
license = License.issue(
    certificate,
    key,
    license_data=LicenseData(
        '2016-10-01T00:00:00',
        '2020-10-01T00:00:00'))

# Store the license
with open('license.key', 'wb') as f:
    license.store(f, b'LicensePassword')

请注意License.store的第二个参数。它是一个密码,用于 派生加密密钥以加密最终许可证数据。这不是秘密,因为 它需要可用于验证许可证的应用程序。

验证许可证

要验证许可证,您需要上面步骤中使用的证书,如 以及用于加密最终许可证数据的密码。下面的代码 显示所需的最小步骤:

from truepy import License


# Load the certificate
with open('certificate.pem', 'rb') as f:
    certificate = f.read()

# Load the license
with open('license.key', 'rb') as f:
    license = License.load(f, b'LicensePassword')

# Verify the license; this will raise License.InvalidSignatureException if
# the signature is incorrect
license.verify(certificate)

发行说明

2.0.3-更新文件

  • 更新的文档与python 3兼容。

2.0.2-正确处理dsa密钥

  • 更正了读取dsa密钥的错误。
  • 更新文件。

2.0.1-更正文件

  • 已将声明的参数类型更改为License.issue

2.0-不依赖于openssl

  • 更改的证书要使用的证书和签名验证例程 cryptography而不是pyOpenSSL

    这将更改所有将证书或密钥作为参数的方法。

1.0.1-许可证数据错误修复

  • 已将truepy.LicenseData.information更改为info以与兼容 truelicense

1.0-初始释放

  • 支持TrueLicense版本1许可证的基本许可证操作

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

推荐PyPI第三方库


热门话题
java有没有任何安卓开发方法可以在屏幕上找到最大单位?   java中的客户机/服务器:程序在输入第二个文件名时卡住   基于java XML上下文的bean无法执行构造函数注入:未找到默认构造函数   java在应用程序中显示通知或作出反应   java如何使spring boot在多对多关系中创建的id成为主键   java有没有办法用JNI设置DirectByteBuffer内存?   java如何为连接池配置Hibernate、Spring和ApacheDBCP?   使用double而不是int的java循环   java我希望输入不区分大小写   java如何在JEditorPane中显示charset=windows1252的html   在Java中,什么会导致抛出异常FileNotFoundException?   面向对象Java哈希集实现设计   用于打印字母的java For循环   java在测试期间向类构造函数插入特定值   SpringJavaMongoDB类NotFoundException:org。springframework。数据转换收集工厂   java将SOAP XML字符串转换为对象或仅读取其内容   java如何将单个POJO类映射到多个表   java中的数组ArrayIndex越界异常