所以这就是问题:我在我的项目中使用MongoDB,所以有24个字符的ObjectId,只使用十六进制字母表。我在我的项目中向提供商发出http请求,在此请求中我需要为回调目的设置一个唯一的ID,但提供商只允许 20个字符用于此ID,我不知道#39;不知道为什么。
所以,我的问题是,使用16个字符的字母(hexa),有16 ^ 24个可能的mongo ID,对吗? 假设我在HTTP请求中使用基于64个不同字符的Id([0-9] [a-z] [A-Z] -_), 如果我错了,请纠正我,但我认为有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