一、编码规则
Base64编码的思想是是采用64个基本的ASCII码字符对数据进行重新编码。它将需要编码的数据拆分成字节数组。以3个字节为一组。按顺序排列24位数据,再把这24位数据分成4组,即每组6位。再在每组的的最高位前补两个0凑足一个字节。这样就把一个3字节为一组的数据重新编码成了4个字节。当所 要编码的数据的字节数不是3的整倍数,也就是说在分组时最后一组不够3个字节。这时在最后一组填充1到2个0字节。并在最后编码完成后在结尾添加1到2个“=”。

例:将对ABC进行BASE64编码:

1、首先取ABC对应的ASCII码值。A(65)B(66)C(67);
2、再取二进制值A(01000001)B(01000010)C(01000011);
3、然后把这三个字节的二进制码接起来(010000010100001001000011);
4、 再以6位为单位分成4个数据块,并在最高位填充两个0后形成4个字节的编码后的值,(00010000)(00010100)(00001001)(00000011),其中蓝色部分为真实数据;
5、再把这四个字节数据转化成10进制数得(16)(20)(9)(3);
6、最后根据BASE64给出的64个基本字符表,查出对应的ASCII码字符(Q)(U)(J)(D),这里的值实际就是数据在字符表中的索引。

注:BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

二、解码规则
解码过程就是把4个字节再还原成3个字节再根据不同的数据形式把字节数组重新整理成数据。

三、java自带base64实现加密解密

import java.io.UnsupportedEncodingException;
import sun.misc.*;
public class test08 {
// 加密
public String encoded(String str) {
byte[] b = null;
String s = null;
try {
b = str.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (b != null) {
s = new BASE64Encoder().encode(b);
}
return s;
}
// 解密
public String decode(String s) {
byte[] b = null;
String result = null;
if (s != null) {
BASE64Decoder decoder = new BASE64Decoder();
try {
b = decoder.decodeBuffer(s);
result = new String(b, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
public static void main(String[] args) throws UnsupportedEncodingException {
String str="some string";
//加密该字符串
String encodedString=new test08().encoded(str);
System.out.println(encodedString);
//解密该字符串
String decodedString=new test08().decode(encodedString);
System.out.println(decodedString);
}
}

输出结果:

c29tZSBzdHJpbmc=
      some string

四、引用第三方包实现加密解密

import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;
/**
* 封装Base64的工具类
*
*/
class UrlBase64Coder3{
public final static String ENCODING="UTF-8";
//加密
public static String encoded(String data) throws UnsupportedEncodingException {
//      byte[] b=Base64.encodeBase64(binaryData)(data);
byte[] b=Base64.encodeBase64(data.getBytes(ENCODING));
return new String(b,ENCODING);
}
//解密
public static String decode(String data) throws UnsupportedEncodingException{
byte[] b=Base64.decodeBase64(data.getBytes(ENCODING));
return new String(b,ENCODING);
}
}
public class test07 {
public static void main(String[] args) throws UnsupportedEncodingException {
String str="some string";
//加密该字符串
String encodedString=UrlBase64Coder3.encoded(str);
System.out.println(encodedString);
//解密该字符串
String decodedString=UrlBase64Coder3.decode(encodedString);
System.out.println(decodedString);
}
}

输出结果

c29tZSBzdHJpbmc=
      some string

参考文章:

http://www.cnblogs.com/reonlyrun/archive/2006/12/29/640991.html

http://blog.csdn.net/huangyunzeng2008/article/details/6563711

Base64编码解析以及加密、解密实现相关推荐

  1. go-dongle 0.2.0 版本发布了,一个轻量级、语义化的 golang 编码解码、加密解密库

    dongle 是一个轻量级.语义化.对开发者友好的 Golang 编码解码和加密解密库 Dongle 已被 awesome-go 收录, 如果您觉得不错,请给个 star 吧 github.com/g ...

  2. JS基于编码方式实现加密解密文本

    JS基于编码方式实现加密解密文本 严格来讲这是一种简单的编码方式:加密,将明文[注]转成编码.解密则是编码转码为明文本. [注:明文是指没有加密的文字(或者字符串),一般人都能看懂.] 下面源码用到 ...

  3. 前端DES加密、base64编码,后端DES解密、base64解码

    项目场景: 在系统开发的过程中有的时候,我们为了数据的安全性会把前端的数据进行加密,然后再在后端程序中对加密数据进行解密或解密,今天我们就在这里说2种简单的方法(DES加密.base64编码) 具体实 ...

  4. java中base64编码加密和android中base64编码加密不一样?base64编码解析错误?

    在android的base64加密后得到: WwogIHsKICAgICJ0MSI6ICIwIiwKICAgICJ0MiI6ICIyNDM4NCIsCiAgICAidDMiOiAiIiwKICAgIC ...

  5. JS的3种加密方式:base64编码、md5加密及sha加密

    用法总结:创建加密js文件,引入加密js 注:md5.sha1加密方式有多种方法可用 1.加密js文件 1.1base64.js function Base64() {// private prope ...

  6. 利用Base64对文本进行加密解密操作

    有时候我们需要对数据进行加密解密,最常见的加密方法有MD5加密.Base64加密.而今天讲的是Base64加密解密方法,我们需要引用两个文件using System.Collections.Gener ...

  7. php 处理 url 加密_php url编码与解码(加密/解密)

    本节内容: url编码与解码 base64_encode 将字符串以 BASE64 编码. 语法: string base64_encode(string data); 返回值: 字符串 函数种类: ...

  8. unicode在线编码,java加密解密

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public ...

  9. Delphi调用C#的加密解密(Base64/AES/DES/MD5可扩充)

    1. 背景: 近期,由于工作上与第三方公司传输数据的时候需要采取数据加密,但是我们采用的时较低版本的Delphi 6:由于加密算法等差异,导致在传输的加密数据第三方一致解析不了(具体问题表现为base ...

最新文章

  1. 修改完 字符串单词首字母大写
  2. DDL、DML、DCL的理解
  3. 矩阵用jordan解决initial-value问题_矩阵与数值计算(6)——矩阵幂级数 sin A、cos A...
  4. C#学习小记12实现一个接口
  5. php pdo 执行多条语句,php – 在pdo预处理语句中执行多插入或多个不同插入是更好/更快?...
  6. hdu 5178(尺取法)
  7. 【IoT】基于NB-IoT的CoAP协议浅析
  8. 来鹅厂干大事!腾讯广告技术类岗位高能来袭~
  9. Open3d之网格变形
  10. 直播盒子源码开发合作
  11. VS2010旗舰版安装图解
  12. Excel 制作色卡
  13. 杭州电信域名解析服务器,国内电信域名解析服务器dns分布表.docx
  14. 中考计算机易错知识点,中考语文常见的易错考点23个
  15. 数据猿·金猿榜丨2017工业大数据领域最具潜力创业公司
  16. 使用阿里云服务器安装微擎教程环境搭建
  17. 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)
  18. 怎么添加扫描仪到计算机快捷键,Win7系统添加扫描仪快捷方式的方法
  19. SQLsever数据库期末复习笔记
  20. log4j 打印线程号配置_日志配置log4j 打印线程号

热门文章

  1. 阿里内核数据库文章-目录
  2. 《高等数学》 第七版 同济大学
  3. [转载] 可疑的成功
  4. web 前端的浏览器
  5. 我在阿里三年的运营经都在这儿了
  6. 微信小程序 -- 原生JS集成腾讯IM实时聊天/实时音视频(踩坑及心得)
  7. 微信小程序 消除图片拼接接缝
  8. 游戏y欧系家角色设计没灵感怎么办?
  9. TLS协议分析 (九) 现代加密通信协议设计
  10. 考研证件照不能戴眼镜,不能PS,要求素颜审核非常严?