Java 不同的Base64解码器
我在验证JWT时遇到了一个问题。我正在运行的代码是一个相当肮脏的黑客,它使用JWT的第二个组件并通过Base64解码器运行。然而,事实证明,使用一些超级特殊的JWT,我得到了一些非法字符(Java 不同的Base64解码器,java,base64,jwt,decode,Java,Base64,Jwt,Decode,我在验证JWT时遇到了一个问题。我正在运行的代码是一个相当肮脏的黑客,它使用JWT的第二个组件并通过Base64解码器运行。然而,事实证明,使用一些超级特殊的JWT,我得到了一些非法字符(5f) 这是在使用Base64.getDecoder().decode(声明) 我读了一点东西,觉得我必须改用Base64.geturldecker().decode(声明)来让它工作(看起来是这样的) 但我不完全明白为什么。。。我在Base64的文档中找到了这个: 基本的 使用RFC 4648和RFC 204
5f
)
这是在使用Base64.getDecoder().decode(声明)
我读了一点东西,觉得我必须改用Base64.geturldecker().decode(声明)
来让它工作(看起来是这样的)
但我不完全明白为什么。。。我在Base64
的文档中找到了这个:
基本的
使用RFC 4648和RFC 2045表1中规定的“Base64字母表”进行编码和解码操作。编码器不添加任何换行符(换行符)。解码器拒绝包含base64字母表以外字符的数据
URL和文件名安全
使用RFC 4648表2中规定的“URL和文件名安全Base64字母表”进行编码和解码。编码器不添加任何换行符(换行符)。解码器拒绝包含base64字母表以外字符的数据
这里唯一的区别是Basic也使用了
RFC 2045
,但是有人能解释一下这是怎么一个问题吗?这个答案基于Alex K的评论
RFC 2045是Base64编码的原始RFC。使用此RFC时,经过一段时间后,很明显,此编码不适用于URL/URI编码,因为此RFC使用字符+
和/
后来创建了一个修订的RFC(RFC4648),其中包含一个新表,其中包含可用于编码的字符。此表使用了其他字符,而不是+
和/
因此,今天您必须使用这两个表中的一个来进行base64编码。应尽可能使用第一个表,而第二个表仅在+
和/
的使用导致问题(例如URL)时使用。“Normal”Base64可以包含+和/符号,如果在URL中使用,这些符号将中断,因为它们在URI方案中具有重要意义(+可以解释为编码空间和/或路径分隔符)RFC中的表2指定-和uu作为替换,因为它们是URI安全的。