2012-08-22 33 views
4

我看到在开源中有很多base64实现可用,并且我在维护的产品中发现了多个内部实现。是否有可用于完整测试base64编码/解码器的数据集?

我想分解重复,但我不是100%确定所有这些实现给出相同的输出。因此,我需要有一个数据集来测试所有可能的输入组合。

是否有可用的地方?谷歌搜索没有真正报告。

我在stackoverflow上看到了一个类似的问题,但这个问题还没有得到充分的回答,实际上只是要求一个用来测试所有64个字符的短语(用ascii)。例如,它不处理填充。所以一个测试字符串肯定不适合100%测试的账单。

回答

6

也许像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输出,只有它们是否插入换行符,并且其中该换行实现插入分隔符和所使用的线路终端的不同的。你将不得不做额外的测试,以确定你是否可以安全地替换使用另一种样式的实现。特别是,解码器可能会对线路长度或终端做出假设。

+1

在充气城堡中的测试在单元测试中有点不好。它正在生成随机数据,然后检查编码解码,最终得到原始随机数据。 –

+1

我同意。我自己的单元测试使用RFC 4648字符串和几个精心构造的包含控制字符的长字符串。 I –

+0

(点击提交意外)我提到了Bouncy Castle测试,因为你想测试所有角色。虽然大量的随机数据不能保证包含每个字符,但它比通过手动构建的静态数据更可能破坏实现。诚然,往返闻起来有点蹊跷,但实际上,编码器和解码器不太可能存在互补错误。根据我的经验,实现了几个类似于base64的编码器(必须排除一些合法的可打印字符),一个破碎的编码器会造成垃圾,并通过破碎的解码器运行该垃圾会造成乱码。 –