如何找到关键EC的python-加密
问题描述:
我使用Python的加密模块,以这种方式产生EC关键的ASN.1组件如何找到关键EC的python-加密
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相间螺旋缠绕制成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 /密码可以做这很容易:
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
进行加密。