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

base64 - Base64 如何解码的?

冯枫
2023-10-30
str = "中!中" ;对应的 byte[] = [-28, -72, -83, 33, -28, -72, -83]

new String(..)转字符串的时候是怎么知道 -28, -72, -83 为一组的呢?
是字符编码有什么规则吗?( 0x**----(byte) ** 是负数的就是3个字节一组这样?)

共有2个答案

燕朝明
2023-10-30

确定是否一组不是base64的功能,是UTF-8的功能,或者说是中文编码约定的。

南宫喜
2023-10-30

Base64 是一种用64个字符来表示任意二进制数据的方法。它常用于在文本协议(如HTTP,SMTP等)中编码二进制数据。

首先,让我们了解下 Base64 编码的基本原理。Base64 编码过程可以分为三个步骤:

  1. 将二进制数据按照3个字节一组(不足3个字节的,用0补齐)拆分;
  2. 将每个3字节的二进制数据转换为16进制的字符串;
  3. 将得到的16进制字符串中的字母A-Z, a-z, 0-9,+,/,=,进行替换。

在你的例子中,str = "中!中" 这个字符串经过Base64编码后得到的字节是 [-28, -72, -83, 33, -28, -72, -83]。那么我们按照上面的步骤进行逆向操作:

  1. 从右向左依次取3个字节组成的二进制数,得到 011000100110010101100110(这是"中!"的二进制表示);
  2. 将这个二进制数转换为16进制,得到 6d21
  3. 根据Base64的替换规则,将 6d21 中的字符进行替换,得到 -*-

同样的方法处理 "中",得到的二进制数为 0110001001100101,转换为16进制为 6d6,替换后为 --*

所以,new String(..)在转字符串的时候,并不知道 -28, -72, -83 为一组。它只是按照字符的ASCII码进行解析。你看到的 -28, -72, -83 是一组是因为在Base64的编码过程中,每3个字节的二进制数据会被转换为16进制的字符串,然后这个字符串中的每个字符的ASCII码就是 -28, -72, -83

至于 0x**----(byte) ** 是负数的就是3个字节一组的问题,这是不正确的。负数并不能作为判断是否为一组的依据。在Java中,一个字节的范围是 -128127,所以看到负数并不意味着是3个字节一组。同样的,看到 0x**---- 形式的数字也不能说明这就是3个字节一组。

 类似资料:
  • 介绍 Base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。 使用 String a = "伦家是一个非常长的字符串"; //5Lym5a625piv5LiA5Liq6Z2e5bi46ZW/55qE5a2X56ym5Liy String encode = Base64.en

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

  • 问题内容: 这是我的代码,我不明白为什么解码功能不起作用。 请少有洞察力会很棒。 它给了我:[解码错误-输出不是utf-8] [解码错误-输出不是utf-8] 问题答案: 返回 最大 长度。 此长度对于调整缓冲区大小很有用,但是不会写入缓冲区的一部分,因此将不是有效的UTF-8。 您只需要使用函数返回的实际写入长度即可。

  • 以下是我的要求: 程序将有一个XML文件作为输入,带有3个标记:、和。所有这些数据都是Base64编码的。注意:程序正在使用BC JAR 下面是我试图解码证书的代码: 当我打印new String(certByteValue, Standard ardCharset.UTF_8)的值时,程序正在打印一些无法识别的文本。当执行代码的最后一行时,系统正在抛出 java.security.cert.证书

  • 我对Java编程很陌生,并尝试制作基于Base64和UTF-8的解码器。 我目前正在尝试让解码器从控制台获取输入,然后执行解码并在控制台中显示结果。我对如何通过“public static byte[]decode(String src)”将输入解码,然后在控制台中打印出来感到有点迷茫。 到目前为止,我得到的代码如下:

  • 主要内容:1 Java8 Base64编码解码的介绍,2 基本编码和解码,3 URL和文件名的编码解码,4 MIME,5 Base64的内部类,6 Base64的方法,7 Base64.Decoder的方法,8 Base64.Encoder的方法,9 Java Base64案例:基本编码和解码,10 Java Base64案例:URL编码和解码,11 Java Base64案例:MIME编码和解码1 Java8 Base64编码解码的介绍 Java提供了一个Base64类来处理加密。您可以使用提