2016-05-31 14 views
1

現在、私たちはデータベースからユーザの公開鍵を取得し、そのユーザのために文字列を暗号化する必要があるプロジェクトに取り組んでいます。Python暗号化ライブラリがPEM形式のload_pem_public_keyに失敗する

残念ながら、暗号化ライブラリ(cryptography == 1.2.1)でエラーが発生しています。

公開鍵:

-----BEGIN PUBLIC KEY-----MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAy2SBwad+TZRyCPDUdxZkGqBipyY7UmTTdGOKL/dgOOsuITXFy/COCi2ylo/owI7u+/K5lkdoBunn1OEu+UFzxRy4bKQK2OkpP6dtAHfyexracpeiHVccRIkQB743DpfupDVtR5TweZsjkRM2SDcpwXZJbnSpa8pzxl6mHvZhV/D2kDkSPLQnI6iWchExt5e/psorpWvy22smaL1xvINztaaRSXFqMQILtSxv/2lJJGc6PRyQacQ4XxDk2DwKBKPyFYHYelYpjGFErUIRz7/EdY4vc3pzr2HMo0AFvvu51ezKIrFGDXt9I7xwEEOSY59mNtA9u9oPyd7UhXkK1JB7OSI458rfHZEXUsvmqqpHH8FKC4dBCZasEHqzMdter05h/v2hMbPV/QgqrArs1p/P6KMpnlYvhnTrIj9p30kOIq7WSfCyXBlTjAb8unYST6vtHXB21TOM6e6szea8fWgCnO3e/xD4M/xdVEqgGxDJWr7qOeHL+l1I93f0wBpO4qlmdMgFz+UqO2p+7dtN4JQO5PwCYHOLgE9bJJZKzaB61BeM4xznqiVfUxOBmtN0k5m1DnKL0lUagSyitwq0H7AY802O91n7ykFYO/gsFkfqNFtdgsGX56lqILU1dYKX3fVsd8r5rENndBE7J0HEUjYz9JHjS+m8EMJ+57kKztP0EgUCAwEAAQ==-----END PUBLIC KEY----- 

注:私は崇高にコードを貼り付けると全くwhichspacesや改行文字が含まれていません!それは単なる1行です。 < - これは既に問題ですか?

これはDjangoモデルのデータベースから来るので、ユニコード/文字列です。

は私がhttps://cryptography.io/en/latest/hazmat/primitives/asymmetric/rsa/#key-loading

失敗した行からコードをとっている。

key = load_pem_public_key(bytes(pem_public_key), backend=default_backend()) 

エラーは次のとおりです。

  assert errors[0][1] in (
       self._lib.ERR_LIB_EVP, 
       self._lib.ERR_LIB_PEM, 
       self._lib.ERR_LIB_ASN1, 
      ) 
      raise ValueError("Could not unserialize key data.") 

:から来

ValueError: Could not unserialize key data. 

ウィアサートif rsa_cdata != self._ffi.NULL:は、エラーが発生する障害が発生したよう

  if rsa_cdata != self._ffi.NULL: 
       rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) 
       evp_pkey = self._rsa_cdata_to_evp_pkey(rsa_cdata) 
       return _RSAPublicKey(self, rsa_cdata, evp_pkey) 
      else: 
       self._handle_key_loading_error() 

:CHが原因で呼ばれています。

load_pem_public_key関数が公開鍵を正しく読み取れないのはなぜですか?

答えて

2
[OK]を

、だから、さらにグーグルの後、私はここに答えが見つかりました: https://crypto.stackexchange.com/questions/19043/can-i-remove-new-lines-in-a-public-key

の結果:、効果的

pem_public_key = pem_public_key.replace("-----BEGIN PUBLIC KEY-----", "") 
pem_public_key = pem_public_key.replace("-----END PUBLIC KEY-----", "") 
pem_public_key = re.sub("(.{64})", "\\1\n", pem_public_key, 0, re.DOTALL) 
pem_public_key = "-----BEGIN PUBLIC KEY-----\n" + pem_public_key 
pem_public_key = pem_public_key + "\n-----END PUBLIC KEY-----" 

64chars後に新しい行を。

+0

ちょうど私の問題を解決しました、ありがとうございます! –

関連する問題