From: "H.Holon" Date: 2007-03-01T10:51:47+09:00 Subject: [ruby-dev:30458] The Base16, Base32, and Base64 Data Encodings 相馬です。 一発言ごとに勉強不足が剥かれていくのはこわいですが 楽しくもありますね。 On 2007/03/01, at 10:22, Takahiro Kambe wrote: > RFC2045の 6.8. Base64 Content-Transfer-Encoding の Table 1 に続く > パラグラフに、 > > The encoded output stream must be represented in lines of no more > than 76 characters each. All line breaks or other characters not > > という記述があります。base64を名乗る以上は行長に制限は存在する、と解釈 > できます。 これは見落としていましたm(_ _)m そこで手をつけた以上はと思い、調べてみると今は base16/32/64 専用の rfcがあって、 http://tools.ietf.org/html/rfc4648 ( http://www5d.biglobe.ne.jp/~stssk/rfc/rfc4648.html ) The Base16, Base32, and Base64 Data Encodings となっているようです。 # あわせてもう MIMEではなく base64のことなので # Subjectかえました。 これを読んでみると、どうも今の規格としては base16/32/64 では長さ制限はないようですね。これらを使う envelopesが 制限する場合にはそっちに従うこと、という感じのようです。  なので、opensslがハジくのはそれはそれで問題がなく、 Rubyの先日パッチしました実装での長さ無制限も、問題は ないようです。  逆に、 > Implementations MUST NOT add line feeds to base-encoded data unless > the specification referring to this document explicitly directs base > encoders to add line feeds after a specific number of characters. とありますので、単純に pack()を base64ライブラリとして考えると、 改行はマズいようです。 # packの 'm'とは別に base16/32/64つくったほうが # いいのかな? ---- SOUMA Yutaka (H.Holon) [ holon@radastery.jp | http://radastery.jp/ ]