为了执行非对称加密,Common 的 Lisp Ironclad 库需要使用指数和模数来初始化密钥。鉴于我可能不想自己生成密钥,所以我站在 OpenSSL 巨头的肩膀上生成密钥
ssh-keygen -t rsa -C "foo@bar.com"
检查 fils 生成的文件,我发现它是 PEM 格式的。
file ~/.id_rsa
=> ~/.ssh/id_rsa: PEM RSA private key
在其他一些 SO 问题之后,我得到了这个
openssl asn1parse -i -in ~/.ssh/id_rsa
0:d=0 hl=4 l=1187 cons: SEQUENCE
4:d=1 hl=2 l= 1 prim: INTEGER :00
7:d=1 hl=4 l= 257 prim: INTEGER :BBFB9E...
268:d=1 hl=2 l= 3 prim: INTEGER :010001
273:d=1 hl=4 l= 256 prim: INTEGER :769BE9...
533:d=1 hl=3 l= 129 prim: INTEGER :ECCB14004...
665:d=1 hl=3 l= 129 prim: INTEGER :CB3B02...
797:d=1 hl=3 l= 128 prim: INTEGER :78054EF...
928:d=1 hl=3 l= 128 prim: INTEGER :0D474BC43....
1059:d=1 hl=3 l= 129 prim: INTEGER :D71D75FF....
现在从那里一些帖子说添加选项 -strparse 19(其他 18)来获取指数和模数。这就是我在以下几行中遇到错误的地方:
openssl asn1parse -i -in ~/.ssh/id_rsa -strparse 19
Error parsing structure
140334635108032:error:0D07209B:asn1 encoding routines:ASN1_get_object:too long:asn1_lib.c:142:
140334635108032:error:0D068066:asn1 encoding routines:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1306:
140334635108032:error:0D06A03A:asn1 encoding routines:ASN1_COLLECT:nested asn1 error:tasn_dec.c:1190:
因此,PEM 可能不是 asn1parse 格式。我也尝试过 -inform DER。所以问题是我如何从生成密钥到从 PEM 证书中获取模数和指数。