我可以从RSA公钥文件中删除新行以获得一个单行字符串吗?所以问题是密钥是否看起来像这样

AAA
BBB
CCC




AAA\n\rBBB\n\rCCC\n\r


是否与以下相同?

AAABBBCCC


#1 楼

我假设您的意思是基数为64的密钥文件,因为从二进制文件中删除换行符显然会破坏事情。实际上,就像OpenPGP密钥(RFC 4880)一样,它们通常使用否则过时的PEM标准(RFC 1421)在base 64中进行编码。

PEM可打印编码部分说:


为了表示PEM消息的封装文本,将encoding
函数的输出定界为文本行(使用local
约定),除最后一行完全包含64 可打印字符,最后一行包含64个或更少的可打印字符。


OpenPGP基数64部分说:


编码的输出流必须以不超过76个字符的行表示。


另一方面,对于SSH,RFC 4716第3节:


密钥文件是一个文本文件,包含一系列行。文件中的每一行
不得超过72个8位字节,不包括行
终止符。




实践中的实现接受更长的时间吗?线?我希望许多人这样做。但是,虽然不会丢失任何信息,但是使用这种编码在技术上是不合格的。

评论


$ \ begingroup $
4880指出MIME 2405也表示76,而不是较早的1421说64; PGP和PEM的BEGIN和END虚线是虚线,而MIME具有其他边界。与SSH更相关的是4716,它引用了全部三个,但指定了不同的BEGIN / END行和内部标头以及最大宽度72。无关但相似的是,OpenSSL具有与SSH相同的许多加密原语,并且在许多事情上使用了标称PEM。在大多数情况下,它写入64个字符(每1421个字符),读取76个字符(每2405个字符),并且无声地删除任何内容,尽管最近在开发者列表上已经讨论了解决此问题的方法。
$ \ endgroup $
–dave_thompson_085
2014-09-10 6:53

$ \ begingroup $
@ dave_thompson_085,我错过了ssh标签。如果问题是关于SSH的,那么4716确实是最相关的。
$ \ endgroup $
–otus
2014-09-10 8:49



$ \ begingroup $
不知道为什么Q在2019年仍然有效,但自从它生效以来:2015年rfc7468重新指定了'PEM'格式-仍然用64行折断。2016-08年的OpenSSL 1.1.0确实可以读取行长超过76,但仍不是无限。当然不是SSH格式。
$ \ endgroup $
–dave_thompson_085
19年8月24日在5:25