8

オープンソースで利用可能な多くの base64 実装があることを知り、私が保守している製品に複数の内部実装を見つけました。

重複を排除しようとしていますが、これらすべての実装が同一の出力を与えることを 100% 確信しているわけではありません。そのため、考えられるすべての入力の組み合わせをテストするデータセットが必要です。

それはどこかで入手できますか?グーグル検索は実際にはそれを報告しませんでした。

stackoverflow で同様の質問を見ましたが、その質問には完全には回答されておらず、実際には 64 文字すべてをテストする 1 つのフレーズ (ASCII で) を求めているだけです。たとえば、 = を使用したパディングは処理しません。したがって、1 つのテスト文字列が 100% テストの条件に合わないことは確かです。

4

1 に答える 1

10

おそらく、Bouncy Castle の Base64Test のようなものは、あなたが望むことをするでしょうか?. base64 で注意が必要なのは、パディングを正しく処理することです。あなたが言ったようにそれをカバーすることは確かに重要です。したがって、RFC 4648 では、次のテスト ベクトルが指定されています。

   BASE64("") = ""
   BASE64("f") = "Zg=="
   BASE64("fo") = "Zm8="
   BASE64("foo") = "Zm9v"
   BASE64("foob") = "Zm9vYg=="
   BASE64("fooba") = "Zm9vYmE="
   BASE64("foobar") = "Zm9vYmFy"

一部の実装では、改行を挿入するかどうか、および改行を挿入する実装では使用される改行と行終端がどこに挿入されるかだけが異なる base64 出力が生成される場合があります。あるスタイルを使用している実装を別のスタイルに安全に置き換えることができるかどうかを判断するには、追加のテストを行う必要があります。特に、デコーダーは、行の長さや終端について想定する場合があります。

于 2012-09-03T18:12:39.253 に答える