小编abh*_*bhi的帖子

如何查找EC密钥python-cryptography的ASN.1组件

我正在以这种方式使用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())
Run Code Online (Sandbox Code Playgroud)

EC密钥的asn.1结构如下

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

来自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-----
Run Code Online (Sandbox Code Playgroud)

处理DSA或RSA很容易,因为所有ASN.1参数都是整数.

先感谢您

python cryptography openssh python-cryptography

5
推荐指数
1
解决办法
380
查看次数

字节字符串跨越多行

我需要解析源代码中跨越多行的字节字符串.像这样

self.file.write(b'#compdef %s\n\n'
                    '_arguments -s -A "-*" \\\n' % (self.cmdName,))
Run Code Online (Sandbox Code Playgroud)

此行抛出以下异常

builtins.SyntaxError: cannot mix bytes and nonbytes literals
Run Code Online (Sandbox Code Playgroud)

可以通过以下方式修复

self.file.write(b'#compdef %s\n\n\'\'_arguments -s -A "-*" \\\n' % (self.cmdName,))
Run Code Online (Sandbox Code Playgroud)

注意后面的反斜杠\n.但是此修复程序遵循每行少于79个字符的项目规则.

我该如何解决?

代码在Python 2上工作正常,但在Python 3上失败.

python literals string-literals bytestring python-3.x

1
推荐指数
1
解决办法
2021
查看次数