我看到开源中有许多 base64 实现可用,并且我在我正在维护的产品中发现了多个内部实现。
我正在尝试排除重复项,但我不能 100% 确定所有这些实现都给出相同的输出。因此,我需要一个数据集来测试所有可能的输入组合。
那地方有吗?谷歌搜索并没有真正报告它。
我在 stackoverflow 上看到了一个类似的问题,但还没有完全回答,它实际上只是要求一个短语(在 ascii 中)来测试所有 64 个字符。例如,它不处理带有 = 的填充。因此,一个测试字符串肯定不适合 100% 测试。
我看到开源中有许多 base64 实现可用,并且我在我正在维护的产品中发现了多个内部实现。
我正在尝试排除重复项,但我不能 100% 确定所有这些实现都给出相同的输出。因此,我需要一个数据集来测试所有可能的输入组合。
那地方有吗?谷歌搜索并没有真正报告它。
我在 stackoverflow 上看到了一个类似的问题,但还没有完全回答,它实际上只是要求一个短语(在 ascii 中)来测试所有 64 个字符。例如,它不处理带有 = 的填充。因此,一个测试字符串肯定不适合 100% 测试。
也许像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 输出,其不同之处仅在于它们是否插入换行符,以及断行的实现在何处插入断行符和使用的行终止符。您必须进行额外的测试以确定您是否可以安全地将使用一种样式的实现替换为不同的样式。特别是,解码器可能会假设行长度或终止。