当前位置: 首页 > 面试题库 >

如何在PyCrypto中使用X509证书?

古文康
2023-03-14
问题内容

我想用PyCrypto在python中加密一些数据。

但是使用时出现错误key = RSA.importKey(pubkey)

RSA key format is not supported

密钥是使用以下命令生成的:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mycert.key -out mycert.pem

代码是:

def encrypt(data):
    pubkey = open('mycert.pem').read()
    key = RSA.importKey(pubkey)
    cipher = PKCS1_OAEP.new(key)
    return cipher.encrypt(data)

问题答案:

PyCrypto不支持X.509证书。您必须首先使用以下命令提取公钥:

openssl x509 -inform pem -in mycert.pem -pubkey -noout > publickey.pem

然后,您可以RSA.importKey在上使用publickey.pem

如果您不想或不能使用openssl,则可以获取PEM X.509证书,并使用纯Python进行认证,如下所示:

from Crypto.Util.asn1 import DerSequence
from Crypto.PublicKey import RSA
from binascii import a2b_base64

# Convert from PEM to DER
pem = open("mycert.pem").read()
lines = pem.replace(" ",'').split()
der = a2b_base64(''.join(lines[1:-1]))

# Extract subjectPublicKeyInfo field from X.509 certificate (see RFC3280)
cert = DerSequence()
cert.decode(der)
tbsCertificate = DerSequence()
tbsCertificate.decode(cert[0])
subjectPublicKeyInfo = tbsCertificate[6]

# Initialize RSA key
rsa_key = RSA.importKey(subjectPublicKeyInfo)


 类似资料:
  • 我想用Java语言创建一个X509证书,然后从中提取公钥。 我在网上搜索了一下,发现了很多代码示例,但都有错误(未知变量或未知类型),或者有很多警告说:“方法...来自类型...是不建议使用的”等。 例如,以下代码不起作用的原因: 谁能告诉我如何使用纯Java或Bouncy Castle创建证书,然后从中获取公钥? 谢谢大家。

  • 我正在尝试使用DSS框架根据X509证书的吊销状态验证它,您在哪里找到它? 我使用这段代码用CRL和OCSP验证证书。我想知道是否已被撤销。 类具有类似于、、的方法,但没有与撤销相关的方法。 我在其他论坛上找到了一个方法,但我没有。我确信我已经安装了所有的依赖项。 因此,我只需要一个简单的真/假。

  • 问题内容: 我有一个Java客户端正在调用Web服务操作,该操作将证书“ thumbprint”作为参数。我相信指纹是证书的公钥的某种SHA16哈希,采用十六进制字符串格式,但是我不确定。 .NET框架似乎包括一种获取此值的简单方法(X509Certificate2.Thumbprint属性)。在Windows中查看.cer文件的属性也会显示指纹,如下所示: 因此,我的问题是:如果我有java.s

  • 我需要用DSA公钥验证X509证书签名。我的证书文件x509.crt,我的DSA公钥在一个名为dsa_pub.key的文件中 我正试图为此使用openssl。我已经阅读了openssl验证文档,但在其中找不到任何有关DSA的参考。 当我运行以下命令时,我可以在证书中看到我的DSA公钥: 但是,在使用文件DSA_pub.key中的DSA公钥验证cert.crt时,我遇到了麻烦 如果您有任何建议,我将

  • 我正在测试iText 7.1.2.0库,以便在C#项目中使用数字证书或智能卡(X509Certificate2)签署pdf文件。但是当我尝试创建IExternalSignature时,我遇到了这个错误。 根据找到的留档(这里,这里和这里),实现这个过程的方法是使用BouncyCastle库,它允许从数字证书中提取主键,但是,它给我一个错误,我找不到另一种方法来做到这一点。在留档(这里)中,它们是从

  • 我正在使用: Windows 10(版本1709,OS版本17025.1000) .NET framework 4.7 VS 2017(版本:15.3.5) 以下是我所做的: 所以我不确定如何进一步使用ECC X509证书的公钥来加密数据。