用于签名和验证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 swing表单配置文件中显示动态布局   swing Java使用GridLayout和鼠标交互式JPanel创建JFrame   java使用jsp dao和servlet从数据库中的4行中只插入几行   java SqlLite:我们可以选择行作为列吗?   启动glassfish服务器时java获取错误   PersistenceUnit的java部署[…]失败。关闭此PersistenceUnit的所有工厂   java将具有多个关系的实体与集合中的任何元素进行匹配   java对命名模式的建议,该模式在op失败时尝试强制转换返回null   使用jtwitter的java安卓抛出错误   使用Java方法查找数组中最小int的位置   SwingJava。网络气球提示没有出现   java无法使用JavaMail api发送邮件   java HashSet contains()为自定义对象返回false。hashCode()和equals()似乎实现正确   Java:在运行时和编译时向类中添加字段?   java正在服务类中导入jersey和JAXR,这被认为是错误的做法