Java 使用Base64将BigInteger转换为字符串并反转结果
我尝试使用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
- 检查A1:
=>“99999999”
“O5rJ/w==”
- 检查B1:
=>“O5rJ/w==”
“99999999”
- 选中B2:
“///code>=>
“4294967295”
- 选中A2:
=>“4294967295”
,而不是“///w”
“///code>
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编码字符串获取字节吗?