首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用pkcs7 PyAsn1从PyAsn1信封中获取加密密钥

无法使用pkcs7 PyAsn1从PyAsn1信封中获取加密密钥
EN

Stack Overflow用户
提问于 2018-07-20 02:29:31
回答 1查看 328关注 0票数 0

我试图从一个PKCS7信封中提取一个RSA加密的AES密钥,并得到一个错误,上面说加密的密钥是一个模式,而不是一个值。为什么信封里有一行写着encryptedKey=.

代码语言:javascript
复制
content, rest = decode(env_der, asn1Spec=rfc2315.ContentInfo())
assert content['contentType'] == rfc2315.envelopedData

myenvelop, rest = decode(content['content'], asn1Spec=rfc2315.EnvelopedData())
print(myenvelop)
print(myenvelop['recipientInfos'][1]['encryptedKey'])

该代码的结果是:

代码语言:javascript
复制
    EnvelopedData:
 version=0
 recipientInfos=RecipientInfos:
  RecipientInfo:
   version=0
   issuerAndSerialNumber=IssuerAndSerialNumber:
    issuer=Name:
     =RDNSequence:
      RelativeDistinguishedName:
       AttributeTypeAndValue:
        type=2.5.4.6
        value=0x13025553
      RelativeDistinguishedName:
       AttributeTypeAndValue:
        type=2.5.4.10
        value=0x130f552e532e20476f7665726e6d656e74
      RelativeDistinguishedName:
       AttributeTypeAndValue:
        type=2.5.4.11
        value=0x131c556e697465642053746174657320506f7374616c2053657276696365
      RelativeDistinguishedName:
       AttributeTypeAndValue:
        type=2.5.4.3
        value=0x131255535053496e7465726e616c537562324341


    serialNumber=488380148491395325238848

   keyEncryptionAlgorithm=KeyEncryptionAlgorithmIdentifier:
    algorithm=1.2.840.113549.1.1.1
    parameters=0x0500

   encryptedKey=0x1b396af2d3a1eca95621262c85fd11835616fc5e1d342c752a2082dd559a23c8f11c21d68b8d5317c721c1d7eba7a1c5bef8ee15d428da74c513a61437d6ba7e6ba4286540ec6c068091b5a611ea36c0aaf44b3055fddbdfe40f5472aa0c1daaa69b67ff5bac3e9de17f5c12f7bd4c86ad4d505341308048c82f29cf71c3bcb9108039ccbf7ebc5f9784570f360a1ec3c529dfc94950d290aa95d80e849688b3cc509851173cedf12e963dcd1d083b87ab3a41b7a0db5f79ca4a52b28b3758fec1f20a627d181e95547d56f0b51fcf2a211371df8d62b5e62473ece192649493d89a72693ffe94c2dbfb7e5ba1fa1c04b623b5094600786b931e6cd1a6f406d1

 encryptedContentInfo=EncryptedContentInfo:
  contentType=1.2.840.113549.1.7.1
  contentEncryptionAlgorithm=ContentEncryptionAlgorithmIdentifier:
   algorithm=2.16.840.1.101.3.4.1.42
   parameters=0x041016b5378e3bfde72671a7a207a4038840



Traceback (most recent call last):
  File "C:/Users/VoxaiLap10/Desktop/pythonbible/cryptotestpemmp3_b_md5_7-19-18b.py", line 81, in <module>
    unEnvelop(filename, pemFile, outfilename)
  File "C:/Users/VoxaiLap10/Desktop/pythonbible/cryptotestpemmp3_b_md5_7-19-18b.py", line 41, in unEnvelop
    print(myenvelop['recipientInfos'][1]['encryptedKey'])
  File "C:\Program Files (x86)\Python36-32\lib\site-packages\pyasn1\type\univ.py", line 882, in __str__
    return self._value.decode(self.encoding)
  File "C:\Program Files (x86)\Python36-32\lib\site-packages\pyasn1\type\base.py", line 221, in __getattr__
    raise error.PyAsn1Error('Attempted "%s" operation on ASN.1 schema object' % attr)
pyasn1.error.PyAsn1Error: Attempted "decode" operation on ASN.1 schema object
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-20 06:37:18

可疑的部分是[1]订阅,应该是[0]吗?我假设您正在尝试处理RecipientInfos序列的第一个元素,它是基于零的。

错误消息本身意味着您要处理的对象没有初始化,例如,没有填充任何具体的值。这就是为什么它只能用作“模式”,例如,用于类型信息。

当您通过不存在的索引订阅RecipientInfos时,将创建新的RecipientInfo元素,该元素显然不包含任何具体的值(除了默认值)。从这个意义上说,它仍然是一个模式,而不是模式实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51434245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档