Encryption RSA公钥格式

Encryption RSA公钥格式,encryption,rsa,public-key-encryption,Encryption,Rsa,Public Key Encryption,在哪里可以找到有关RSA公钥格式的文档 由OpenSSH格式化的RSA公钥: ssh-rsa一个3岁的研究者发现了一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个3岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层。2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研

在哪里可以找到有关RSA公钥格式的文档

OpenSSH
格式化的RSA公钥:

ssh-rsa一个3岁的研究者发现了一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个3岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层。2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一个2岁的研究层,一层,一个2岁的研究层,一个2岁的研究层,一个2层。一层。一个2层。一层。一层。一层。一ZG/rpNZNlWW2+jGIxqZtgWg7lTy3mXy5x836Sj/6L

为在Secure Shell中使用而格式化的相同公钥:

与RSA公钥格式相同的公钥(注意五个
-
,没有空格):

base-64编码数据的十六进制转储:

00 00 00 07 73 73 68 2d 72 73 61 00 00 00 01 25 00 00 01 00 7f 9c 09
8e 8d 39 9e cc d5 03 29 8b c4 78 84 5f d9 89 f0 33 df ee 50 6d 5d d0 
16 2c 73 cf ed 46 dc 7e 44 68 bb 37 69 54 6e 9e f6 f0 c5 c6 c1 d9 cb
f6 87 78 70 8b 73 93 2f f3 55 d2 d9 13 67 32 70 e6 b5 f3 10 4a f5 c3 
96 99 c2 92 d0 0f 05 60 1c 44 41 62 7f ab d6 15 52 06 5b 14 a7 d8 19 
a1 90 c6 c1 11 f8 0d 30 fd f5 fc 00 bb a4 ef c9 2d 3f 7d 4a eb d2 dc 
42 0c 48 b2 5e eb 37 3c 6c a0 e4 0a 27 f0 88 c4 e1 8c 33 17 33 61 38 
84 a0 bb d0 85 aa 45 40 cb 37 14 bf 7a 76 27 4a af f4 1b ad f0 75 59 
3e ac df cd fc 48 46 97 7e 06 6f 2d e7 f5 60 1d b1 99 f8 5b 4f d3 97 
14 4d c5 5e f8 76 50 f0 5f 37 e7 df 13 b8 a2 6b 24 1f ff 65 d1 fb c8 
f8 37 86 d6 df 40 e2 3e d3 90 2c 65 2b 1f 5c b9 5f fa e9 35 93 65 59 
6d be 8c 62 31 a9 9b 60 5a 0e e5 4f 2d e6 5f 2e 71 f3 7e 92 8f fe 8b

我知道,您不能仅仅将分隔符从
---BEGIN SSH2 PUBLIC KEY----
更改为
----BEGIN RSA PUBLIC KEY----
,并期望它足以从一种格式转换为另一种格式(这就是您在示例中所做的)

对这两种格式都有很好的解释

您在
RSA公钥
中获得的内容更接近
公钥
的内容,但您需要偏移ASN.1结构的开头,以反映
公钥
也有一个指示它是哪种类型的密钥的指标(请参阅)。您可以使用
openssl asn1parse
-strparse 19
看到这一点,如中所述

编辑:在编辑之后,您可以使用
grep-v----| tr-d'\n'| base64-d | openssl asn1parse-inform DER获得
RSA公钥结构的详细信息

    0:d=0  hl=4 l= 266 cons: SEQUENCE          
    4:d=1  hl=4 l= 257 prim: INTEGER           :FB1199FF0733F6E805A4FD3B36CA68E94D7B974621162169C71538A539372E27F3F51DF3B08B2E111C2D6BBF9F5887F13A8DB4F1EB6DFE386C92256875212DDD00468785C18A9C96A292B067DDC71DA0D564000B8BFD80FB14C1B56744A3B5C652E8CA0EF0B6FDA64ABA47E3A4E89423C0212C07E39A5703FD467540F874987B209513429A90B09B049703D54D9A1CFE3E207E0E69785969CA5BF547A36BA34D7C6AEFE79F314E07D9F9F2DD27B72983AC14F1466754CD41262516E4A15AB1CFB622E651D3E83FA095DA630BD6D93E97B0C822A5EB4212D428300278CE6BA0CC7490B854581F0FFB4BA3D4236534DE09459942EF115FAA231B15153D67837A63
  265:d=1  hl=2 l=   3 prim: INTEGER           :010001
要解码SSH密钥格式,还需要结合RFC 4253使用中的数据格式规范:


例如,在开始时,您会得到
0000000773682d727361
。前四个字节(
0007
)给出了长度。其余的是字符串本身:73=s,68=h,…->
73 73 68 2d 72 73 61
=
ssh rsa
,然后是长度1的指数(
00 00 01 25
)和长度256的模数(
00 00 01 00 7f…
)。

OpenSSL rsa ssh密钥的解码base64数据开始,我能够猜测一种格式:

  • 0007
    :四字节长度前缀(7字节)
  • 73 73 68 2d 72 73 61
    :“ssh rsa”
  • 0001
    :四字节长度前缀(1字节)
  • 25
    :RSA指数(
    e
    ):25
  • 00
    :四字节长度前缀(256字节)
  • RSA模数(
    n
    ):

我的理论最接近于RFC 4253:

“ssh rsa”密钥格式具有以下特定编码:

  string    "ssh-rsa"
  mpint     e
  mpint     n
这里的“e”和“n”参数构成签名密钥blob

但它不能解释长度前缀


取我(在问题中)找到的随机
RSA公钥
,并将base64解码为十六进制:

30 82 01 0a 02 82 01 01 00 fb 11 99 ff 07 33 f6 e8 05 a4 fd 3b 36 ca 68 
e9 4d 7b 97 46 21 16 21 69 c7 15 38 a5 39 37 2e 27 f3 f5 1d f3 b0 8b 2e 
11 1c 2d 6b bf 9f 58 87 f1 3a 8d b4 f1 eb 6d fe 38 6c 92 25 68 75 21 2d 
dd 00 46 87 85 c1 8a 9c 96 a2 92 b0 67 dd c7 1d a0 d5 64 00 0b 8b fd 80 
fb 14 c1 b5 67 44 a3 b5 c6 52 e8 ca 0e f0 b6 fd a6 4a ba 47 e3 a4 e8 94 
23 c0 21 2c 07 e3 9a 57 03 fd 46 75 40 f8 74 98 7b 20 95 13 42 9a 90 b0 
9b 04 97 03 d5 4d 9a 1c fe 3e 20 7e 0e 69 78 59 69 ca 5b f5 47 a3 6b a3 
4d 7c 6a ef e7 9f 31 4e 07 d9 f9 f2 dd 27 b7 29 83 ac 14 f1 46 67 54 cd 
41 26 25 16 e4 a1 5a b1 cf b6 22 e6 51 d3 e8 3f a0 95 da 63 0b d6 d9 3e 
97 b0 c8 22 a5 eb 42 12 d4 28 30 02 78 ce 6b a0 cc 74 90 b8 54 58 1f 0f 
fb 4b a3 d4 23 65 34 de 09 45 99 42 ef 11 5f aa 23 1b 15 15 3d 67 83 7a 
63 02 03 01 00 01
发件人:

A.1.1 RSA公钥语法

RSA公钥应使用ASN.1类型表示
RSAPublicKey

  RSAPublicKey ::= SEQUENCE {
     modulus           INTEGER,  -- n
     publicExponent    INTEGER   -- e
  }
RSAPublicKey类型的字段具有以下含义:

  • 模是RSA模n
  • publicExponent是RSA公共指数e
:

给出公钥模数和指数:

  • 模数=
    0xfb1199ff0733f6e805a4fd3b36ca68…837a63
  • 指数=65537

更新:我的

参考解码器

RSA公钥

-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
加密私钥

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
-----END RSA PRIVATE KEY-----
CRL

阴极射线管

企业社会责任

新企业社会责任

-----BEGIN NEW CERTIFICATE REQUEST-----
-----END NEW CERTIFICATE REQUEST-----
质子交换膜

PKCS7

私钥

-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
DSA密钥

-----BEGIN DSA PRIVATE KEY-----
-----END DSA PRIVATE KEY-----
椭圆曲线

-----BEGIN EC PRIVATE KEY-----
-----END EC PRIVATE KEY-----
PGP私钥

-----BEGIN PGP PRIVATE KEY BLOCK-----
-----END PGP PRIVATE KEY BLOCK-----
PGP公钥

-----BEGIN PGP PUBLIC KEY BLOCK-----
-----END PGP PUBLIC KEY BLOCK-----

提到OpenSSH格式是一种格式,但没有详细介绍该格式。相反,它提到格式完全记录在;除非我在那里找不到任何文件。我更新了问题以使用我找到的某人的RSA公钥。我相信第一个链接已移动到您可以使用
openssl asn1parse-通知PEM
----开始RSA公钥---
数据或任何其他PEM结构。比使用grep/tr/base64命令手动操作头要容易得多。
RSA公钥遵循ASN.1格式(请参见PKCS规范),它与OpenSSH的格式无关。回答得很好-非常感谢。根据来源,“前导零是因为高位,但数字是正数”使其成为ssh rsa密钥格式。关于这一点,我能找到的最有用的提示是github.com/openssh/openssh-portable中的一条注释,它说“/*如果设置了MSB,则在以ssh rsa格式写出bignums时,在前面加上一个\0*/”。由于生成的RSA密钥的性质,这似乎只是一个公共模数50%的问题,而不会出现在公共指数中。关于
string
mpint
,回答得很好-在RFC 4251第5节中有描述,无需提问:)
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE REQUEST-----
-----END CERTIFICATE REQUEST-----
-----BEGIN NEW CERTIFICATE REQUEST-----
-----END NEW CERTIFICATE REQUEST-----
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
-----BEGIN PKCS7-----
-----END PKCS7-----
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
-----BEGIN DSA PRIVATE KEY-----
-----END DSA PRIVATE KEY-----
-----BEGIN EC PRIVATE KEY-----
-----END EC PRIVATE KEY-----
-----BEGIN PGP PRIVATE KEY BLOCK-----
-----END PGP PRIVATE KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
-----END PGP PUBLIC KEY BLOCK-----