我看到开源中有很多base64实现,我发现在我维护的产品中有多个内部实现。
我试图分解重复项,但我并不是100%确定所有这些实现都提供相同的输出。因此,我需要一个测试所有可能的输入组合的数据集。
那可以在某处吗?谷歌搜索没有真正报告它。
我在stackoverflow上看到了一个类似的问题,但是还没有完全回答,实际上只是要求一个短语(在ascii中)来测试所有64个字符。例如,它不会使用=来处理填充。因此,一个测试字符串肯定不适合100%测试的费用。
答案 0 :(得分:9)
像Base64Test in Bouncy Castle这样的东西会做你想要的吗? base64中棘手的部分是正确处理填充。如你所述,覆盖它当然很重要。因此,RFC 4648规定了这些测试向量:
BASE64("") = ""
BASE64("f") = "Zg=="
BASE64("fo") = "Zm8="
BASE64("foo") = "Zm9v"
BASE64("foob") = "Zm9vYg=="
BASE64("fooba") = "Zm9vYmE="
BASE64("foobar") = "Zm9vYmFy"
您的某些实现可能会生成base64输出,该输出的不同之处仅在于它们是否插入换行符,以及断开行的实现插入了断点和使用的行终止。您将不得不进行其他测试以确定是否可以安全地替换使用不同类型的实现。特别是,解码器可能会对线路长度或终端进行假设。