所以这就是问题所在:我在我的项目中使用 MongoDB,所以有 24 个字符的 ObjectId,只使用十六进制字母。我在我的项目中向提供者发出 http 请求,在此请求中,我需要放置一个唯一的 ID 用于回调目的,但提供者只允许此 ID 包含20 个字符,我不知道为什么。
所以,我的问题是,使用 16 个字符的字母(六进制),有:16^24 个可能的 mongo Id,对吗?假设我在 HTTP 请求中使用基于 64 个不同字符([0-9][az][AZ]-_)的 Id,如果我错了,请纠正我,但我认为有 64^20 个可能的 Id。所以从技术上讲,可以用相应的 Id 对每个可能的 MongoDB ObjectId 进行编码,不是吗?
这似乎是一个经典的 Base64 编码,但神秘的是这并没有像我预期的那样工作,我想我不明白 Base64 编码是如何工作的,因为生成的字符串比原始字符串大......
你认为这一切都是可能的,还是我完全错过了什么?
提前致谢!
编辑:我的一位同事尝试了一些似乎有效的方法。这是Java代码:
byte[] decodedHex = Hex.decodeHex("53884594e4b0695f366f8128".toCharArray());
byte[] encodedHexB64 = Base64.encodeBase64(decodedHex);
System.out.println(new String(encodedHexB64)); // --> U4hFlOSwaV82b4Eo
由于我忽略的原因,这样做是不一样的:
String anotherB64 = Base64.encodeBase64String("53884594e4b0695f366f8128".getBytes());
System.out.println(anotherB64);
它打印:NTM4ODQ1OTRlNGIwNjk1ZjM2NmY4MTI4