【问题标题】:Signing files/file objects using python and pyopenssl使用 python 和 pyopenssl 签署文件/文件对象
【发布时间】:2016-05-12 13:11:12
【问题描述】:

我有以下代码非常适合签署字符串。但是,我现在需要以与在命令行上使用 OpenSSL 相同的方式以编程方式对文件进行签名和获取签名

e.g. openssl dgst -sha1 –sign key.pem -out sig1 file.tar

.

import OpenSSL
from OpenSSL import crypto
import base64
key_file = open("key.pem", "r")
key = key_file.read()
key_file.close()
password = "password"

if key.startswith('-----BEGIN '):
    pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, key, password)
else:
    pkey = crypto.load_pkcs12(key, password).get_privatekey()
print pkey
data = "data"
sign = OpenSSL.crypto.sign(pkey, data, "sha256") 
print sign

data_base64 = base64.b64encode(sign)
print data_base64

如果打开文件并尝试签名:

with open('file.tar', 'r') as the_file:
    sign = OpenSSL.crypto.sign(pkey, the_file, "sha256")
    the_file.write(sign)
    the_file.close()

OpenSSL 抛出错误:

    sign = OpenSSL.crypto.sign(pkey, the_file, "sha256")
    TypeError: must be string or read-only buffer, not file

如何签署文件对象?

【问题讨论】:

    标签: python sign pyopenssl


    【解决方案1】:

    错误表明您正在传递文件的实例,而预期是字符串或只读缓冲区。尝试用 the_file.read() 替换 the_file。

    旁注:如果您尝试加密和/或签署文件,请查看ctypescrypto 支持的Cryptographic Message Syntax (CMS)。 This article 将介绍 SignedData 内容类型,我认为这是您真正追求的内容。

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 1970-01-01
      • 2018-02-03
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 2022-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多