当前位置: 首页 > 知识库问答 >
问题:

解码和编码问题。android中Base64类的不同实现。实用工具*和java。util。*?

邢飞雨
2023-03-14

我正在编写一个应用程序,它使用给定的字符串str执行以下操作:

encode(encrypt(encode(stringToBytearray(str))));

服务器接收Base64编码的字符串,然后对其进行解码-

不幸的是,它并不适用于所有字符串,长字符串导致长Base64字符串,我的服务器抛出以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: Illegal base64 character 5b
 at java.util.Base64$Decoder.decode0(Base64.java:714)
 at java.util.Base64$Decoder.decode(Base64.java:526)
 at Main.decode(Main.java:113)
 at Main.main(ain.java:33)

字符串的格式为“[String,String,…,String]”,没有“s”。

就像我上面提到的,对于不太长的字符串(抱歉,我还不能量化长度),这是可行的。所以我认为我正确地实现了它。

奇怪的是,如果我不发送它,而是解码(decrypt(decode(stringToBytearray(str)));设备本身的字符串,一切都很完美。

我的设置:JDK 7、eclipse(adt-bundle、android开发)(Windows 7)

JDK 8,eclipse(‘normal’java)(Linux(xubuntu))

是因为两个类(Base64)的实现不同吗?如果是这样的话,我怎样才能让它工作?

以下是编码/解码方法

编码(设备:在Windows 7、adt bundle、Android Dev、jdk 7上):

import android.util.Base64

public byte[] encode(byte[] bytearrayToEncode){
   return Base64.encode(bytearrayToEncode, Base64.NO_WRAP|Base64.URL_SAFE);
}

解码(服务器:在Linux上,jdk 8):

import java.util.Base64

public byte[] decode(byte[] bytearrayToEncode){
   return Base64.getUrlDecoder().decode(bytearrayToDecode);
}

字符串都使用相同的字符集(utf-8)进行解/编码!编码/解码:Base64

加密:AES

如果你需要更多信息,尽管问,但我想我已经提供了所有必要的信息。

编辑:

public String bytearrayToString(byte[] bytearray){
    String str = null;
    try {
        str = new String(bytearray, "UTF-8");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return str;
}

public byte[] stringToBytearray(String str){
    byte[] bytearray = null;
    try {
        bytearray = str.getBytes("UTF-8");
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return bytearray;
}

共有3个答案

能旭
2023-03-14

用于编码:

Base64.getEncoder().encodeToString(yourString.getBytes("UTF-8"));

并解码:

byte[] decodedBytes = Base64.getDecoder().decode(yourString);
String stringDecode = new String(decodedBytes, "UTF-8");
郎聪
2023-03-14

如果您的编码字符串中有空格,这是base64中的非法字符。如果删除它,它仍然会在链接到的转换器中生成相同的图像/数据,现在也可以通过代码进行解码。

更新:一些解码器(如您链接的解码器,或Java中的Base64.getMimeDecoder())忽略非法字符,其他解码器(如Base64.getDecoder())不允许使用非法字符。

浦思源
2023-03-14

您必须使用JSONObject将Base64字符串发送到服务器。如果是这样,那么JSONObject将在字符串中添加 " \ " 转义字符,这些字符是非法的Base64字符。您需要做的就是

String rectifiedString = Base64String.replace("\\","");

在使用获取的字符串之前在服务器端。

可选择的

也在服务器端使用

import javax.xml.bind.DatatypeConverter;

<代码>字符串结果=DatatypeConverter。printBase64Binary(ByteArray解码)

byte[] result = DatatypeConverter.parseBase64Binary(str);

相反。

它不仅可以完成任务,而且编码/解码速度更快(如这里的基准测试)。

 类似资料:
  • Base64编码将二进制数据转换为文本格式,通过通信通道传递,用户可以安全地处理文本。 Base64也称为Privacy enhanced Electronic mail (PEM) ,主要用于电子邮件加密过程。 Python包含一个名为BASE64的模块,它包括两个主要功能,如下所示 - base64.decode(input, output) - 它解码指定的输入值参数,并将解码的输出存储为对

  • 抱歉问了两次这个问题,但我研究了两个小时...我Android中Base64解码字符串有问题。例如: 编码字符串: 在javascript和PHP中的结果: 我的Android中的结果: 我从这个页面找到了一个解决方案Android PHP Base64解码有不同的结果 他们说 这是我的函数解码器根据他们说的: 但还是犯了同样的错误

  • 问题内容: Android中是否存在用于String的base-64解码器和编码器? 问题答案: 看到 似乎这是在API版本8或android 2.2中添加的,因此在较旧的平台上将不可用。 但是它的来源是这样,如果需要的话,可以将其原样复制为旧版本。

  • 本文向大家介绍PHP 实现base64编码文件上传出现问题详解,包括了PHP 实现base64编码文件上传出现问题详解的使用技巧和注意事项,需要的朋友参考一下 一、场景 领导:小A同学,我们要做一个样本上传进行分析的功能,你看下是否使用base64编码加进去,这样客户端的同学就不需要用form-data方式来上传了,直接使用json格式就可以上报,可以让格式上报统一。 小A:好的,领导,马上搞定!

  • 我想将一个字符串编码成并通过套接字传输它,然后解码回来。 下面是我的代码,结果是“77+9x6s=” 有什么想法如何实现这一点吗?

  • 我在将文本从UTF-8编码转换为UTF-8编码时遇到问题。这里有字节数组, 我正在将其转换为UTF-8字符串并返回字节数组, 据我所知,这是一个3字节的数组。正当但这是我得到的。 这是什么原因?据我所知,在UTF-8 Specials中,2391189组合被称为替换字符。 这也是一个更大问题的一部分。