精华内容
下载资源
问答
  • Base64编码

    千次阅读 2018-11-15 11:11:20
    Base64编码 文章目录Base64编码一、Base64是什么?二、Base64怎么用?三、Base64的相关点参考博文 一、Base64是什么? Base64是一种用64个字符来表示任意二进制数据的方法。它是一种编码方式,而非加密方式。它...

    Base64编码


    一、Base64是什么?

    Base64是一种用64个字符来表示任意二进制数据的方法。它是一种编码方式,而非加密方式。它通过将二进制数据转变为64个“可打印字符”,完成了数据在HTTP协议上的传输。

    什么情况下我们会用到Base64呢?Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。

    什么是可打印字符?在ASCII码中规定,0-31、128这33个字符属于控制字符,32-127这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。

    Base64,就是使用64个可打印字符来表示二进制数据的方法。这64个字符中包括大小写字母、数字、+和/,还有用来补缺的特殊字符=。

    注意:由于base64编码用了8位字符来表示信息中的6个位,所以base64编码字符串大约比原始值扩大了33%。

    Base64的索引与对应字符的关系如下表所示:
    在这里插入图片描述
    也就是说,如果将索引转换为对应的二进制数据的话需要至多6个Bit。然而ASCII码需要8个Bit来表示,那么怎么使用6个Bit来表示8个Bit的数据呢?6个Bit当然不能存储8个Bit的数据,但是4×6个Bit可以存储3×8个Bit的数据啊!如下表所示:
    在这里插入图片描述

    可以看到“Son”通过Base64编码转换成了“U29u”。这是刚刚好的情况,3个ASCII字符刚好转换成对应的4个Base64字符。但是,当需要转换的字符数不是3的倍数的情况下该怎么办呢?Base64规定,当需要转换的字符不是3的倍数时,一律采用补0的方式凑足3的倍数,具体如下表所示:
    在这里插入图片描述

    每6个Bit为一组,第一组转换后为字符“U”,第二组末尾补4个0转换后为字符“w”。剩下的使用“=”替代。即字符“S”通过Base64编码后为“Uw==”。这就是Base64的编码过程。

    如果要编码的二进制数据不是3的倍数,最后会剩下1个或2个字节怎么办?Base64用\x00字节在末尾补足后,再在编码的末尾加上1个或2个=号,表示补了多少字节,解码的时候,会自动去掉。

    这是字节的位总数不是6的倍数的情况,当剩下4位时,我们需要补2个=凑齐8的倍数;当剩下的是2位时,我们需要补齐1个 = 抽泣8的倍数。
    补全机制

    二、Base64怎么用?

    Java已经替我们写好Base64的实现细节,使用的时候直接调用即可。具体代码如下所示:

    package com.first;
     
    import org.junit.Test;
     
    import java.io.UnsupportedEncodingException;
    import java.util.Base64;
     
    public class Test {
     
        @Test
        public void test() throws UnsupportedEncodingException {
            // 编码
            String encode = Base64.getEncoder().encodeToString("So".getBytes("UTF-8"));
            System.out.println(encode);
            // 解码
            byte[] decode = Base64.getDecoder().decode(encode);
            System.out.println(new String(decode, "UTF-8"));
        }
     
    }
    

    三、Base64的相关点

    1. 首先这算法是编码,不是压缩,编码后只会增加字节数;字节数会成为原字节数的4/3;
    2. 算法简单, 几乎不会影响效率;
    3. 算法可逆, 解码很方便, 不用于私密信息通信;
    4. 虽然解码方便, 但毕竟编码了, 肉眼还是不能直接看出原始内容;
    5. 加密后的字符串只有[0-9a-zA-Z+/=],不可打印字符(包括转移字符)也可传输;

    参考博文

    什么是Base64?

    让你完全理解base64是怎么回事

    base64加密原理详解

    展开全文
  • BASE64编码

    2016-04-12 15:04:25
    BASE64编码 参考文章 概述 编码方法 例1 例2 Base64编码BASE64编码参考文章 base64 百度百科 base64 在线编/解码 概述Base64是一种用64个字符来表示任意二进制数据的方法。Base64编码要求把3个8位字节(3*8=24)...

    BASE64编码

    参考文章

    概述

    Base64是一种用64个字符来表示任意二进制数据的方法。Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用=,因此编码后输出的文本末尾可能会出现1或2个=

    本质上,牺牲存储空间以实现减少编码个数。

    编码方法

    例1

    • 原始数据
    byte 0 byte 1 byte 2
    s 1 3

    - 转成ascii

    byte 0 byte 1 byte 2
    115 49 51

    - 转换2进制

    byte 0 byte 1 byte 2
    01110011 00110001 00110011

    8个一组,也就是01110011**00110001**00110011

    • 重新分组
    组 0 组 1 组 2 组 3
    011100 110011 000100 110011

    6个一组,也就是**011100**110011**000100**110011

    • 补0
    组 0 组 1 组 2 组 3
    0011100 00110011 00000100 00110011

    也就是**00**011100**00**110011**00**000100**00**110011

    • 转成ascii
    byte 0 byte 1 byte 2 byte 3
    28 51 4 51

    - 查Base64编码表

    byte 0 byte 1 byte 2 byte 3
    c z E z

    例2

    • 原始数据
    byte 0
    1

    - 转成ascii

    byte 0
    49

    - 转换2进制

    byte 0
    00110001

    8个一组,也就是00110001

    • 重新分组
      分组时,不够6个组的右边补0
    组 0 组 1
    001100 010000

    6个一组,也就是**001100**010000

    • 补0
    组 0 组 1
    00001100 00010000

    也就是**00**001100**00**010000

    • 转成ascii
    byte 0 byte 1
    12 16

    - 查Base64编码表

    byte 0 byte 1
    M Q

    输出数据需要是4的倍数,输出补=。也就是结果修正为:

    byte 0 byte 1 byte 2 byte 3
    M Q = =

    Base64编码表

    码值 字符 码值 字符 码值 字符 码值 字符
    0 A 16 Q 32 g 48 w
    1 B 17 R 33 h 49 x
    2 C 18 S 34 i 50 y
    3 D 19 T 35 j 51 z
    4 E 20 U 36 k 52 0
    5 F 21 V 37 l 53 1
    6 G 22 W 38 m 54 2
    7 H 23 X 39 n 55 3
    8 I 24 Y 40 o 56 4
    9 J 25 Z 41 p 57 5
    10 K 26 a 42 q 58 6
    11 L 27 b 43 r 59 7
    12 M 28 c 44 s 60 8
    13 N 29 d 45 t 61 9
    14 O 30 e 46 u 62 +
    15 P 31 f 47 v 63 /
    展开全文
  • base64编码

    2016-11-28 11:11:10
    base64编码的目的 base64编码的目的是将字符串中含有的不可见字符用可见字符表示出来,以便复制粘贴。 例如电子邮件的附件一般使用Base64编码,因为附件数据往往含有不可见字符。base64原理 base64的主要思想是将...

    base64编码的目的
    base64编码的目的是将字符串中含有的不可见字符用可见字符表示出来,以便复制粘贴。
    例如电子邮件的附件一般使用Base64编码,因为附件数据往往含有不可见字符。

    base64原理
    base64的主要思想是将输入的字符串或数据编码成只含有{‘A‘-‘Z‘, ‘a‘-‘z‘, ‘0‘-‘9‘, ‘+‘, ‘/‘}这64个可打印字符的串,故称为“Base64”。
    Base64编码的方法是,将输入数据流每次取6 bit,用此6 bit的值(0-63)作为索引去查表,输出相应字符。这样,每3个字节将编码为4个字符(3×8 → 4×6);不满4个字符的以‘=‘填充。

    base64编码/解码帮助类

    using System;
    using System.Text;
    
    namespace Helper
    {
        public class Base64Helper
        {
            public static string GetString(string base64String, Encoding encode)
            {
                byte[] byteArray = Convert.FromBase64String(base64String);
                return GetString(byteArray, encode);
            }
    
            public static string GetBase64String(string inputString, Encoding encode)
            {
                byte[] byteArray = GetBytes(inputString, encode);
                return Convert.ToBase64String(byteArray, 0, byteArray.Length);
            }
    
            public static string GetString(byte[] byteArray, Encoding encode)
            {
                return encode.GetString(byteArray);
            }
    
            public static byte[] GetBytes(string inputString, Encoding encode)
            {
                return encode.GetBytes(inputString);
            }
        }
    }
    string base64String = Base64Helper.GetBase64String("tt", ASCIIEncoding.Default);//base64String = "dHQ=";
    string commonString = Base64Helper.GetString(base64String, ASCIIEncoding.Default);//commonString = "tt";
    展开全文
  • Base64 编码

    2010-02-23 16:28:00
    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base64编码。下面简单介绍Base64算法的原理,由于代码太长就不在此贴出Base...

     Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base64编码。
    下面简单介绍Base64算法的原理,由于代码太长就不在此贴出
    Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。
    转换后,我们用一个码表来得到我们想要的字符串(也就是最终的Base64编码),这个表是这样的:
    0 A 17 R 34 i 51 z
    1 B 18 S 35 j 52 0
    2 C 19 T 36 k 53 1
    3 D 20 U 37 l 54 2
    4 E 21 V 38 m 55 3
    5 F 22 W 39 n 56 4
    6 G 23 X 40 o 57 5
    7 H 24 Y 41 p 58 6
    8 I 25 Z 42 q 59 7
    9 J 26 a 43 r 60 8
    10 K 27 b 44 s 61 9
    11 L 28 c 45 t 62 +
    12 M 29 d 46 u 63 /
    13 N 30 e 47 v
    14 O 31 f 48 w (pad) =
    15 P 32 g 49 x
    16 Q 33 h 50 y
    原文的字节最后不够3个的地方用0来补足,转换时Base64编码用=号来代替。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。
    举一个例子,abc经过Base64编码以后的结果是YWJj.

    发邮件的时候所写的信息自动在后台转换然后传输...

    展开全文
  • 一篇文章彻底弄懂Base64编码原理

    万次阅读 多人点赞 2018-08-16 07:42:09
    目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,...
  • 说明:什么是base64编码呢?百度百科上面给出的解释是这样的: Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面...
  • 通过pdf的base64编码格式直接转为img的base64编码格式: public static String base64PdfToJpgBase64(String base64Pdf) { if (StrUtil.isEmpty(base64Pdf)){ return null; } String jpg_base64 = null; int ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,895
精华内容 7,558
关键字:

base64编码