什么叫Base64编码?

该编码使用64个明文来编码任意的二进制文件,它里面只使用了A-Z,a-z,0-9,+,/这64个字符。编码里面还有“=”号啊,不过等号不属于编码字符,而是填充字符。
为什么发明这么个编码?
这个编码的原理是很简单的,“破解”也很容易,电子邮件刚出来的时候,只传递英文字符,这没有问题,但是后来,中国人,日本人都要发email,这样问题就来了,因为这些字符有可能会被邮件服务器或者网关当成命令处理,故必须得有一种编码来对邮件进行加密,但是加密的目的是为了能够使得一些原始的服务器不出问题,这样加密必须得简单。加密简单,这样客户端程序加密解密也快,又要是明文Ascii编码,这样Base64就诞生了。
java自带的加密和解密

import sun.misc.BASE64Decoder;

public class Base64Utils {
 
 public static String getBASE64(byte[] b) {
  String s = null;
  if (b != null) {
   s = new sun.misc.BASE64Encoder().encode(b);
  }
  return s;
 }
 
 public static byte[] getFromBASE64(String s) {
  byte[] b = null;
  if (s != null) {
   BASE64Decoder decoder = new BASE64Decoder();
   try {
    b = decoder.decodeBuffer(s);
    return b;
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return b;
 }
}

算法详解:
  Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。
例子:
  字符串“张3”
  11010101 11000101 00110011
  从右开始顺序选6个数之后在这个六个数之前添加两个0。,之后再选出6个来,再添加0,依此类推,直到24个二进制数全部被选完。
得到以下结果:
00110101 00011100 00010100 00110011
通过BASE64编码表得到编码结果:
00110101   00011100   00010100   00110011
十进制53   十进制34   十进制20   十进制51
Table 1: The Base64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
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    (pad) =
14 O     31 f      48 w
15 P 32 g 49 x
16 Q 33 h 50 y
这样,最后的2个字节被整理成了“1iU=”。
同理,若原代码只剩下一个字节,那么将会添加两个“=”。只有这两种情况,所以,Base64的编码最多会在编码结尾有两个“=”
至于将Base64的解码,只是一个简单的编码的逆过程。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值