用于签名和验证warc文件的工具

warcsigner的Python项目详细描述


https://travis-ci.org/ikreymer/warcsigner.svg?branch=masterhttps://coveralls.io/repos/ikreymer/warcsigner/badge.svg

用于向WARC(或任何gzip分块)文件添加和验证加密签名的工具

这个包提供了completarywarc-sign工具,它用rsa签名和 warc-verify,用于验证WARC是否已签名

用法

安装时使用:python setup.py install

可以使用python setup.py test

运行测试

签署warc:

warc-sign privatekey.pem my-warc-file.warc.gz

要验证warc是否已签名:

warc-verify publickey.pem my-warc-file.warc.gz

API使用

warcsigner可以从其他脚本中使用。 签署warc:

from warcsigner.warcsigner import RSASigner

signer = RSASigner(private_key_file='privatekey.pem')

if signer.sign('my-warc-file.warc.gz'):
    # warc signed successfully

或验证:

from warcsigner.warcsigner import RSASigner

signer = RSASigner(public_key_file='publickey.pem')

if signer.verify('my-warc-file.warc.gz'):
    # signature verified
else:
    # signature not found/invalid

signverify方法可以采用文件名字符串或类似的文件 stream对象(具有read方法的对象)

此外,在验证后,可以删除签名:

if signer.verify('my-warc-file.warc.gz', remove=True):
    # signature verified and removed

assert signer.verify('my-warc-file.warc.gz') == False

如果第一次验证成功,将删除签名并截断文件 其先前的预签名大小。(如果验证失败,则文件不变)。 如果计划附加到WARC,然后放弃它,这可能很有用

流媒体和seek()

可以使用支持read()而不是文件名的类文件对象。

当对WARC进行签名时,该签名将附加到文件的末尾

验证文件时,seek()可用于确定文件大小和签名位置。 但是,如果将size=param添加到verifyverify_stream调用中,则在 验证和类文件对象是线性使用的。这特别有用 从远程位置传输文件时,seek()不可用。 但必须提供总文件大小。

公钥/私钥应为.PEM格式 有关详细信息,请参见python-rsa formats doc 支持的密钥格式

原始流

在某些情况下,从有符号流返回原始的无符号流可能是有用的。 signer.get_unsigned_stream(stream, size)将返回的包装器,该包装器不包括签名(如果存在)。如果在连接warc时不包括每个warc的签名(和空记录),这将非常有用。

工作原理

python-rsa库用于签名和验证签名

签名存储在一个额外的gzip块中,该块不包含数据,但使用custom extra field 保存签名。这允许验证工具通过检查距WARC末端的固定偏移量来快速访问签名

当解压缩gzip块时,应该没有可检测的差异,因为大多数gzip工具忽略了额外的gzip头。

虽然这是为压缩warc而设计的,但它可以用于任何由连接的gzip块、ARC文件等组成的格式

注意:由于签名是一个gzip块,所以对于未压缩/纯文本文件来说就没有意义了。

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

推荐PyPI第三方库


热门话题
具有未知数量条件的java If语句   java如何在Spark中使用两个“条件”进行过滤?   雅加达ee为ColdFusion提供的最佳Java ee服务器   java如何在jersey的MessageBodyWriter方法中获取writeTo中的anotations值?   java从脚本文件调用jar文件中的函数   java在执行insert语句后,如何获得id值为的语句?   在OS X上设置OpenCV Java绑定   java使用for循环遍历数组x。以字符串形式返回x的元素,其中每个元素由一个空格分隔   ApacheiClientBuilder为Algolia Java创建的APIClient是线程安全的吗?   java在DFS/BFS算法中获取邻居时避免内存分配?   java使用AES/CBC/PKCS5P加密大文件(2GB)   允许保存/加载列布局的Java DB网格组件   队列大小为1的java Spring调度   跑步带有Java参数的exe   java正则表达式将所有“<”和“>”标记替换为“&lt;”及“&gt;”在<<![CDATA]>标签?   java何时同步变量?