【问题标题】:Difference between BouncyCastle and Apache Commons Codec Base64 encodingBouncyCastle 和 Apache Commons Codec Base64 编码之间的区别
【发布时间】:2014-10-05 08:52:29
【问题描述】:

我想了解一下BouncyCastle提供的Base64编码机制和Apache Commons Codec提供的等效机制是否完全兼容,或者是否存在兼容性问题。

我正在开发一个 Java 库,它在一些输入和输出上使用 Base64 编码(它必须对一些输入进行编码,并且对它的一些输出进行编码)。该库使用 Bouncy Castle 的 Base64 编码器。

将使用此库的应用程序之一将使用来自 Apache commons 的 Base64 编码器来执行编码和解码。

我相信 Apache 的实现遵循 RTC 标准,但是 Bouncy Castle 的实现并不遵循这个标准,尽管它在很大程度上遵循相同的标准。这些组件之间会不会存在兼容性问题?

仅在需要相互通信的组件中使用相同的 Base64 编码器是否明智?

【问题讨论】:

  • 您的测试不会缓解这些担忧吗?
  • 您好,感谢您的评论。测试会很有用,但我认为我们不能测试所有可能的输入和输出。我们可以编写很多测试,并获得高度确信这些 base64 编码器是兼容的,但我认为我们仍然会有一些顾虑。
  • this 是您在 BouncyCastle 中使用的类吗?
  • 是的,我们正在使用 org.bouncycastle.util.encoders.Base64

标签: java base64 bouncycastle apache-commons-codec


【解决方案1】:

只在组件中使用相同的 Base64 编码器是否明智? 需要互相交流吗?

简而言之是的,两个通信组件中的 Base64 应该相同

说明

Base64内容传输编码是对任意8-bit字节序列组合的一种描述形式,这种形式不容易被直接识别。该算法主要是给出字符对字符的编码(如ASCII码、UTF-8码)对应的十进制数作为参考,做编码操作。

由于Sun本身并没有提供Base64算法来实现,所以用户必须使用Commons CodecBouncy Castle等开源实现之一。

Bouncy CastleApache Commons 算法之间的区别在于 Bouncy Castlehash 解释为一系列 hexadecimal 值,而 Apache Commons 将相同的 hash 解释为一个 string 在 base64 编码之前。在前一种情况下,结果编码是shorter而不是原始字符串,而在后一种情况下,结果编码是longer而不是原始字符串。

因此,通信组件之间应该使用相同 Base64 编码器。

希望对你有所帮助。

【讨论】:

  • “Bouncy Castle 和 Apache Commons 算法之间的区别在于,Bouncy Castle 将哈希解释为一系列十六进制值,而 Apache Commons 将相同的哈希解释为在 base64 编码之前的字符串。”那是完全错误的。 Bouncy Castle 使用字节,而不是十六进制值,Apache 编解码器根本没有实现加密,当然也没有解释哈希
猜你喜欢
  • 1970-01-01
  • 2017-10-16
  • 2017-04-18
  • 2020-09-03
  • 1970-01-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多