【问题标题】:"Could not deserialize key data" when serializing public key序列化公钥时“无法反序列化密钥数据”
【发布时间】:2020-11-26 06:25:47
【问题描述】:

我正在尝试使用“密码学”模块加载公钥,看起来我正在复制他们所拥有的代码(发布 here),只做了一些小的改动:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes, serialization

def encrypt(message, publicKeyPath):
  with open(publicKeyPath, 'rb') as keyFile:
    privateKey = serialization.load_pem_private_key(
      keyFile.read(),
      password=None,
      backend=default_backend()
    )

  print(privateKey)

message = 'This message will be encrypted'

publicKeyPath = '/(path to key)/My First Key_public.pem'

encryptedMessage = encrypt(message, publicKeyPath)

但是,我不断收到错误消息“无法反序列化关键数据”。这是完整的回溯:

Traceback (most recent call last):
  File "/Users/max.s.haberman/Documents/Code/Experiments/Encryption/encryption2.py", line 23, in <module>
    encryptedMessage = encrypt(message, publicKeyPath)
  File "/Users/max.s.haberman/Documents/Code/Experiments/Encryption/encryption2.py", line 9, in encrypt
    backend=default_backend()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cryptography/hazmat/primitives/serialization/base.py", line 16, in load_pem_private_key
    return backend.load_pem_private_key(data, password)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1186, in load_pem_private_key
    password,
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1411, in _load_key
    self._handle_key_loading_error()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1465, in _handle_key_loading_error
    raise ValueError("Could not deserialize key data.")
ValueError: Could not deserialize key data.

这是我正在使用的公钥,它在其他地方运行良好:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkaqpgfRRZa0H8A7v3ebJ
z+lM+j0Jdw2xftUoIDmGWkrQ0vJXnkCwP/zcALI/mgAlMtr4KDSrE0n7/+1u1uB+
DuhdjuGhu5EAAdA+N1yMOCRNfYRJFpAtQLO2qu6h6wU1HmVLIK87kyTAoVcn+HIX
4uMiQbNG7PH2Cv+VaQvA91I/tTcSkY/ZrGTYcFHa0k+sSGxqQDW7C7mu5RKssxAa
QCSnAUOjV+j1lUMvWYr8qs5yI4wRsFH6sP6m2/Ksrj1i3+DSOWJOy/WQs1e1CBcA
cVfyM+dflllneNkF6rnB0n2wIE4TeRatzy6AlSjQ7FohSkAfOMW6GwszVhEFSAu2
4QIDAQAB
-----END PUBLIC KEY-----

我错过了什么吗?还有什么我需要做的吗?看起来其他 StackOverflow 用户也遇到过这个问题,但我认为他们的情况不适用于我,因为我的密钥不包括 spaces,工作公钥已经是 created 等。任何帮助表示赞赏.提前致谢!

【问题讨论】:

    标签: python cryptography


    【解决方案1】:

    链接的代码是指 private 密钥。但是对于加密,您需要 public 密钥(解密需要 private 密钥):

    publicKey = serialization.load_pem_public_key(
        keyFile.read(),
        backend=default_backend()
    )
        
    

    发布的密钥似乎没问题。它是 PKCS8 格式的 PEM 编码公钥。

    可以在here 找到一个(仍然缺失的)加密示例。

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 2020-11-16
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      相关资源
      最近更新 更多