Java 使用Base64将BigInteger转换为字符串并反转结果

Java 使用Base64将BigInteger转换为字符串并反转结果,java,base64,Java,Base64,我尝试使用Base64将BigInteger转换为字符串,并检查可逆性: 这个箱子很好用: 检查A1:“99999999”=>“O5rJ/w==” 检查B1:“O5rJ/w==”=>“99999999” 但这个案例没有: 选中B2:“///code>=>“4294967295” 选中A2:“4294967295”=>“///w”,而不是“///code> 我正在使用Java8和org.apache.commons.codec.binary.Base64 @测试 公共无效测试Decimal

我尝试使用Base64将BigInteger转换为字符串,并检查可逆性:

这个箱子很好用:

  • 检查A1:
    “99999999”
    =>
    “O5rJ/w==”
  • 检查B1:
    “O5rJ/w==”
    =>
    “99999999”
但这个案例没有:

  • 选中B2:
    “///code>=>
    “4294967295”
  • 选中A2:
    “4294967295”
    =>
    “///w”
    ,而不是
    “///code>
我正在使用Java8和
org.apache.commons.codec.binary.Base64

@测试
公共无效测试DecimalToBase64()
{
最终字符串encodedMaxDec=新字符串(Base64.encodeInteger(新的BigInteger(“999999999”)),StandardCharsets.UTF_8);
Assert.assertEquals(“检查A1”,“O5rJ/w==”,encodedMaxDec);
最终字符串encodedMaxB64=新字符串(Base64.encodeInteger(新的BigInteger(“4294967295”)),StandardCharsets.UTF_8);
Assert.assertEquals(“检查A2”,“//”,encodedMaxB64);
}
@试验
public void testBase64ToDecimal()
{
final biginger decodedMaxDec=Base64.decodeInteger(新字符串(“O5rJ/w==”).getBytes(StandardCharsets.UTF_8));
Assert.assertEquals(“检查B1”、“99999999”、decodedMaxDec.toString());
final BigInteger decodedMaxB64=Base64.decodeInteger(新字符串(“////”).getBytes(StandardCharsets.utf8));
Assert.assertEquals(“检查B2”,“4294967295”,decodedMaxB64.toString());
}

如果有人有主意,谢谢你帮我;-)

当表示
4294967295
时,
bitineger
字节的base64编码不是
//

我假设,因为Java中的每个整数都是有符号的,
biginger
在前面附加一个字节,以指示数字是正数还是负数

因此,此代码

byte[]bigingerbytes=biginger.valueOf(4294967295l.toByteArray()

。。返回一个5字节数组,其中包含以下字节:

0000000001111111111111111111111111111111

如果使用base64编码,则得到
AP///8=

如果您要做的是base64编码一个表示
4294967295
biginger
,然后再将其解码回来,这应该可以做到

Base64.Encoder encoder = Base64.getEncoder();
Base64.Decoder decoder = Base64.getDecoder();

byte[] bigIntegerBytes = BigInteger.valueOf(4294967295l).toByteArray();
String base64EncodedBigIntegerBytes = encoder.encodeToString(bigIntegerBytes);
System.out.println(base64EncodedBigIntegerBytes);

byte[] decodedBigIntegerBytes = decoder.decode(base64EncodedBigIntegerBytes);
BigInteger decodedBigInteger = new BigInteger(decodedBigIntegerBytes);
System.out.println(decodedBigInteger);

我使用的是Java8,我没有看到
Base64
的任何encodeInteger()或decodeInteger()方法(我假设它引用的类是
Java.utils.Base64
)。请指定您使用的Java版本好吗?您好,我正在使用Java 8和
org.apache.commons.codec.binary.Base64
尝试将您的字符编码设置为StandardCharsets.US\u ASCII,因为这是Base64的标准字符集。另外,在第二种方法中,您不是从非Base64编码字符串获取字节吗?