mysql base64 java区别_《Java知识应用》Java加密方式(Base64)详解

1. 说明

Base64加密方式:比较简单,加密快,对普通大众可以起到加密的作用。在程序员眼中和透明一样。

Base64应用场景:图片转码(应用于邮件,img标签,http加密)

2. 案例

importjava.util.Base64;/*** Java 8的java.util套件中,新增了Base64的类别,可以用来处理Base64的编码与解码

* 跟操作系统无关,因为我是64位系统。其实你打印的是 int 类型的, 1个int 4个字节 所以32位。

* GBK采用双字节8位表示,总体编码范围为 8140 -- FEFE,首字节在 81 -- FE 之间,尾字节在 40 -- FE 之间。

* ASCII是7位编码,只使用前7位,第8位补0,所以转换成整数始终为正数,而GBK是8位编码,也就是说一个字节中的第8位可以为1,如1010 1101,而将其转换成byte类型时,byte值为10101101,以补码存储,第8位被当成符号位,当然是负数了,值为:-83。

* “何”字的GBK编码是:BA CE(1011 1010 1100 1110),两个字节第8位都为1,对byte类型来说,都被理解为最高位符号位。这样值就变成-70和-50了。*/

public classMyBase64 {public static voidmain(String[] args) {try{

Base64.Decoder decoder=Base64.getDecoder();

Base64.Encoder encoder=Base64.getEncoder();

String text= "通";byte[] textByte = text.getBytes("GBK");//编码

String encodedText =encoder.encodeToString(textByte);

System.out.println(encodedText);//解码

System.out.println(new String(decoder.decode(encodedText), "GBK"));

}catch(Exception e) {

e.printStackTrace();

}

}

}

运行结果:

d33bd924163b00d10e8843aed122f7fa.png

3. 分析原理

码表:Java中的源码(外加一个“=” 组成)。

/*** This array is a lookup table that translates 6-bit positive integer

* index values into their "Base64 Alphabet" equivalents as specified

* in "Table 1: The Base64 Alphabet" of RFC 2045 (and RFC 4648).*/

private static final char[] toBase64 ={'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M','N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm','n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};

以“通”字为例:

通在GBK编码下的字节码为:1100110110101000。按照每六位重新划分,然后根据6位二进制转换成10进制。最后去码表找对应的值即可。特别说明:Base64,一定是4*n位,

不够的使用“=”代替。 如下表格。

6c519cbda4694006de646eb946f85f5a.png

根据上图可以很清楚的看懂过程。

查看源码也可以比较简单的看懂加密和解密的过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值