我想(PGP /
GPG)签署python代码。是的,我已经阅读了此书以及许多其他有关 保护 和 混淆 python代码的网站-这 不是
我想要的。我不想混淆代码。我希望客户和用户可以看到代码,他们可以修改代码,复制代码并进行派生工作,我希望将软件安装在GPLv3下。但是我想要具有“签名”功能的插件,以便在执行过程中可以
信任 它们。
这在Python中可行吗?检查库的gpg签名后可以导入库吗?这很容易:检查文件的gpg签名,然后通过导入加载它,否则引发异常。但这仅适用于单文件导入,而不适用于目录python模块。
很明显,如果客户更改了程序中的GPG密钥,或者自己在检查算法中删除了某些行,则一切都消失了-但这不是问题。他可以做任何他想做的事-
但这很愚蠢。他想要的是守信。我想让他通过将第三方插件复制到“插件”目录中来添加第三方插件,并让程序检查插件的“可信赖性”-然后将其导入。(因此,他 可以
运行 未 签名的插件,但要自己承担风险。)
Python的import
机制已经提供了实现所需功能所需的所有工具。您可以安装各种import
挂钩,以支持所需的功能。
特别是,您可能会发现安装元路径挂钩很方便,该挂钩可搜索“已签名的模块”并返回一个Loader
能够从此已签名的格式执行导入的。
用于签名插件的一种非常简单方便的格式是zip
包含以下内容的存档:
通过这种方式:
zip
存档解压缩并按自己的意愿进行修改即可。zip
档案库导入已在zipimport
模块中实现。这意味着您不必从头开始重写加载程序。实际上,如果您想将钩子的代码减少到最少,您只需要验证签名,然后将zip
归档文件的路径添加到其中sys.path
,因为pythonzip
即使没有显式使用python也已经处理了从归档文件的导入zipimport
。
使用这种设计,您只需要安装这些挂钩,然后就可以import
将插件当作普通模块使用,并且验证等操作将自动完成。