簡體   English   中英

如何查找EC密鑰python-cryptography的ASN.1組件

[英]How to find ASN.1 components of EC key python-cryptography

我正在以這種方式使用python加密模塊生成EC密鑰

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import ec
key=ec.generate_private_key(ec.SECP256R1(), default_backend())

EC密鑰的asn.1結構如下

   ECPrivateKey ::= SEQUENCE {
 version        INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1),
 privateKey     OCTET STRING,
 parameters [0] ECParameters {{ NamedCurve }} OPTIONAL,
 publicKey  [1] BIT STRING OPTIONAL
 }

來自https://tools.ietf.org/html/rfc5915 setion 3。

我的問題是如何從這個密鑰中獲取ASN.1組件。 我想將密鑰對象轉換為OpenSSH私鑰,類似於

-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,9549ED842979FDAF5299BD7B0E25B384

Z+B7I6jfgC9C03Kcq9rbWKo88mA5+YqxSFpnfRG4wkm2eseWBny62ax9Y1izGPvb
J7gn2eBjEph9xobNewgPfW6/3ZDw9VGeaBAYRkSolNRadyN2Su6OaT9a2gKiVQi+
mqFeJmxsLyvew9XPkZqQIjML1d1M3T3oSA32zYX21UY=
-----END EC PRIVATE KEY-----

處理DSA或RSA很容易,因為所有ASN.1參數都是整數。

先感謝您

使用pyasn1從ASN.1序列中提取公共點相對容易,但是如果你想要PEM加密的PKCS1(也就是“傳統的OpenSSL”),那么pyca / cryptography可以很容易地做到這一點:

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import ec

backend = default_backend()

key = ec.generate_private_key(ec.SECP256R1(), backend)
serialized_key = key.private_bytes(
    serialization.Encoding.PEM, 
    serialization.PrivateFormat.TraditionalOpenSSL, 
    serialization.BestAvailableEncryption(b"my_great_password")
)

您可以在文檔中找到有關private_bytes方法的更多信息。 此時, BestAvailableEncryption將使用AES-256-CBC進行加密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM