我正在使用URL安全的Base64编码来编码我的随机生成的字节数组。但是我在解码时遇到了问题。当我解码两个不同的字符串(除最后一个字符外都相同)时,它会产生相同的字节数组。例如,对于"dGVzdCBzdHJpbmr"
和"dGVzdCBzdHJpbmq"
这两个字符串,结果是相同的:
Array(116, 101, 115, 116, 32, 115, 116, 114, 105, 110, 106)
在编码/解码方面,我使用java.util.Base64
库:
// encoding...
Base64.getUrlEncoder().withoutPadding().encodeToString(myString.getBytes())
// decoding...
Base64.getUrlDecoder().decode(base64String)
这个碰撞的原因是什么?它会在除了最后一个字符之外的其他字符上发生吗?我应该如何解决这个问题,并确保对每个不同的字符串解码返回不同的字节数组?
withoutPadding()
选项是个好主意吗? - Harald K