1.Java 加解密技术系列之 BASE64

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.Java 加解密技术系列之 BASE64相关的知识,希望对你有一定的参考价值。

Java 加解密技术系列之 BASE64

 

  • 序号
  • 背景
  • 正文
  • 总结

 


这段时间,工作中 用到了 Java 的加解密技术,本着学习的态度,打算从这篇文章开始,详细的研究一番 Java 在加解密技术上有什么与众不同,同时,也想为大家或者自己留下点什么,一块分享这其中的“精髓”。需要说明的是,这个系列可能要持续一段时间,因为,加解 密的相关技术太多太多了,要搞明白这些着实不是一件容易的事。


背景

说到这个加解密技 术,之前一直没有机会研究这个东西,这次公司里的项目需要加解密的支持,因此有机会能够好好研究这一块。刚开始写的时候,还在考虑是写一篇文章还是写一个 系列,后来我发现,加解密这块的东西很多,如果一篇文章的话,就我现在这种水平,还远远不能一篇以序之,所以,还是决定采用细嚼慢咽的方式,来一点一点的 消化。


正文

废话说了很多,终于要进正题了。

其实,严格来说,BASE64 是一种编码的方式,并不是真正意义上的加解密,不过,从另一个角度来考虑的话,就是把数据变为人不会用肉眼能分辨其真实性的角度来说,BASE64 也是属于加解密范畴的。而且,有的加密技术,也是需要通过 BASE64 来编码转换的。

那么,BASE64 到底是什么呢?下面我来大概的介绍一下 BASE64 的编码原理。

BASE64 的编码都是按字符串长度,以每 3 个 8 bit 的字符为一组,然后针对每组,首先获取每个字符的 ASCII 编码,然后将 ASCII 编码转换成 8 bit 的二进制,得到一组 3*8=24 bit 的字节。然后再将这 24 bit 划分为 4 个 6 bit 的字节,并在每个 6 bit 的字节前面都填两个高位 0,得到 4 个 8 bit 的字节,然后将这 4 个 8 bit 的字节转换成十进制,对照 BASE64 编码表 (下表),得到对应编码后的字符。

注:1. 要求被编码字符是8bit的,所以须在ASCII编码范围内,\u0000-\u00ff,中文就不行。
  2. 如果被编码字符长度不是3的倍数的时候,则都用0代替,对应的输出字符为=

技术分享

原理讲清楚了,下面举两个例子说明一下。

a) 字符长度为能被3整除时:比如“Tom” :

技术分享

所以,btoa(‘Tom‘) = VG9t,也就是说,“Tom”的 BASE64 编码结果为 VG9t。

b) 字符串长度不能被3整除时,比如“Lucy”:

技术分享

由于 Lucy 只有 4 个字母,所以按 3 个一组的话,第二组还有两个空位,所以需要用 0 来补齐。这里就需要注意,因为是需要补齐而出现的 0,所以转化成十进制的时候就不能按常规用 BASE64 编码表来对应,所以不是 a, 可以理解成为一种特殊的“异常”,编码应该对应“=”。


结束语

通过我上边说的这 些,我想你已经了解了 BASE64 编码的原理,当然,如果你现在去看 Java 中有关 BASE64 编码源码的话,我想你一定能很快就搞明白的。不过,在此之前,推荐你还是要亲自试一下,用程序编码一个单词,然后使用上边提到的原理,人工编码相同的单 词,你就会更加清楚是怎么回事。

顺带说一句,工作中,不能因为有了计算机,就什么事都要依赖它。有一句话,我想大家都知道,“用进废退”,就是这个道理。核心的东西掌握了,再来借助计算机,那就是事半功倍了,否则只会沦为高科技时代的奴隶。

 

 

 

转自-http://blog.csdn.net/happylee6688/article/details/43950521

 

以上是关于1.Java 加解密技术系列之 BASE64的主要内容,如果未能解决你的问题,请参考以下文章

Java 加解密技术系列之 DES

java之BASE64加解密

加解密算法之Base64

Java基础加密之BASE64加解密

python之base64加解密

python之base64加解密