$ cat > foo.txt
-----BEGIN PUBLIC KEY-----
MIIBBgKBgDI/ranPo8MDfguQfSzqg7mtNlUJLLBK7tlVALyk42agbLTSFcZbs9Yw
t3nSe9yNzZB9ZVrL3O9GXkEb6xvj3dqrog+wWOeFCqNV7BuJNYYC/ef4vlnUFQdw
yswbd7d198qjWBZ7MiZRXxX8qKRln+osTvsDYOMZk93k0cGZgyuJAoGAHkgFohgA
nH93kDPjN4sHaT9WsmZ4ailbMtcnWuLizTRJ2sdGjNrpuwT1R+x1nlYHOeDUSOu6
De0kQJX+HZuQCoha6THsdgcV297krN22FwsDZ1PItXLIr5oC7zcNQaDyAJOIv6BC
ufHQ0IR+L9b9esniMbF8yV0d7EVAaBJiyRk=
-----END PUBLIC KEY-----
$ openssl asn1parse -i -in foo.txt
0:d=0 hl=4 l= 262 cons: SEQUENCE
4:d=1 hl=3 l= 128 prim: INTEGER :323FADA9CFA3C3037E0B907D2CEA83B9AD3655092CB04AEED95500BCA4E366A06CB4D215C65BB3D630B779D27BDC8DCD907D655ACBDCEF465E411BEB1BE3DDDAABA20FB058E7850AA355EC1B89358602FDE7F8BE59D4150770CACC1B77B775F7CAA358167B3226515F15FCA8A4659FEA2C4EFB0360E31993DDE4D1C199832B89
135:d=1 hl=3 l= 128 prim: INTEGER :1E4805A218009C7F779033E3378B07693F56B266786A295B32D7275AE2E2CD3449DAC7468CDAE9BB04F547EC759E560739E0D448EBBA0DED244095FE1D9B900A885AE931EC760715DBDEE4ACDDB6170B036753C8B572C8AF9A02EF370D41A0F2009388BFA042B9F1D0D0847E2FD6FD7AC9E231B17CC95D1DEC4540681262C919
你去吧。我在相当常规的 Linux 系统上使用了这些命令。
请注意,您的文件很奇怪。RSA 公钥包含两个整数,即模数 ( n ) 和公共指数 ( e )。它通常被编码为一个 ASN.1 结构,它是SEQUENCE
两个INTEGER
值中的一个。然后该结构应该是 DER 编码的,并且生成的字节序列将成为BIT STRING
另一个外部 ASN.1 结构中的内容,该结构还包含密钥类型的显式标识符(即表明密钥确实是RSA 类型)。在您的情况下,缺少该外部结构,因此无论在编码的 ASN.1 结构中还是在 PEM 标头(“BEGIN PUBLIC KEY”)中,都没有正式表明密钥是 RSA 密钥。
作为 RSA 密钥,它看起来也有点奇怪。第一个整数,据称是模数,长度为 1022 位,这不是很常见(开发人员和密码学家真的很喜欢 2 的幂,所以如果他们有可能生成 1024,他们不会接受 1022 位整数位整数)。第二个整数,公共指数,非常大(1021 位);这得到了 RSA 的正式支持,但非常罕见:公共指数可以很短,而不会对安全性产生不良影响,这使得公共密钥操作更快,因此没有真正的理由使用大指数。一些广泛的实现(Windows CryptoAPI ...)甚至不支持大于 32 位的公共指数。
如果您拥有的确实是 RSA 公钥,那么很可能有人在拉您的腿——或者正在以不常见且可能很弱的方式做事。