为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/SJQ。

http://www.cnblogs.com/shijiaqi1066/p/4288372.html

Base64 算法基本原理

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。

对字符串的编码效果

未编码:sjq security base64

编码后:c2pxIHNlY3VyaXR5IGJhc2U2NA==

Base64的主要特点就是将二进制数据编码成一段字符串。字符串包括:大小写字母各26个,10个数字,“+”,“/”,一共64个字符,以及“=”等号用于作为后缀。

由于log264 = 6,所以每6bit为一个“单元”,对应于一个可打印字符。

例:3 byte = 24 bit = 4 [Base64单元] ,即3个字节需要用4个可打印字符来表示。

Base64单元值与可打印字符的对应关系,显示如下:

当原数据长度不是3的整数倍时,如果最后剩下一个输入数据,在编码结果后加2个“=”;如果最后剩下两个输入数据,编码结果后加1个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证数据还原的正确性。

例:对“Man”进行编码。

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email、在XML中存储复杂数据。

Base64算法可以用于简易的加解密,其本质是使用替换字符的方式对数据进行加密。严格的说,Base64并不是一种加解密算法。

Java算法实现

Java中常用3种Base64的实现:

  • JDK
  • Commons Codec
  • Bouncy Castle

JDK实现

package sjq.security;

import java.io.IOException;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder; public class JDKBase64 { private static String src = "sjq security base64"; public static String encoder(String src){
BASE64Encoder encoder = new BASE64Encoder();
String encode = encoder.encode(src.getBytes());
return encode;
} public static String decoder(String code){
BASE64Decoder decoder = new BASE64Decoder();
byte[] bs = null;
try {
bs = decoder.decodeBuffer(code);
} catch (IOException e) {
e.printStackTrace();
}
return new String(bs);
} public static void main(String[] args) {
String code = encoder(src);
System.out.println(code); String src = decoder(code);
System.out.println(src);
}
}

说明:

使用Eclipse编写Java代码时,可能找不到BASE64Decoder,BASE64Decoder;只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。

Apache Commons Codec 的实现方式

package sjq.security;

import org.apache.commons.codec.binary.Base64;

public class CommonCodecBase64 {

    private static String src = "sjq security base64";

    public static String encoder(String src) {
byte[] bytes = Base64.encodeBase64(src.getBytes());
return new String(bytes);
} public static String decoder(String code) {
byte[] bytes = Base64.decodeBase64(code.getBytes());
return new String(bytes);
} public static void main(String[] args) {
String code = encoder(src);
System.out.println(code); String src = decoder(code);
System.out.println(src);
}
}

Bouncy Castle 的实现方式

package sjq.security;

import org.bouncycastle.util.encoders.Base64;

public class BouncyCastleBase64 {

    private static String src = "sjq security base64";

    public static String encoder(String src) {
byte[] bytes = Base64.encode(src.getBytes());
return new String(bytes);
} public static String decoder(String code) {
byte[] bytes = Base64.decode(code.getBytes());
return new String(bytes);
} public static void main(String[] args) {
String code = encoder(src);
System.out.println(code); String src = decoder(code);
System.out.println(src);
} }

说明:

如果下载不到Bouncy Castle的Jar包,则可以使用MAVEN下载Jar包。

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处。LaplaceDemon/SJQ。

http://www.cnblogs.com/shijiaqi1066/p/4288372.html

Base64算法的更多相关文章

  1. MD5加密、时间戳转换、base64算法加密、解密

    #region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="str"& ...

  2. java Base64算法的使用

    Base64是常见的网络加密算法,Base64编码可用于在HTTP环境下传递较长的标识信息.详见 Base64介绍 1 自定义的base64算法 Base64Encrypt.java public c ...

  3. MD5加密算法(信息摘要算法)、Base64算法

    1 什么是MD5 信息摘要算法,可以将字符进行加密,每个加密对象在进行加密后都是等长的 应用场景:将用户密码经过MD5加密后再存储到数据库中,这样即使是超级管理员也没有能力知道用户的具体密码是多少:因 ...

  4. c# base64算法解密

    /// <summary> /// 将字符串使用base64算法加密 /// </summary> /// <param name="code_type&quo ...

  5. java基础---->Base64算法的使用

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.详细的Base64信息,可以参见维基百科:https://en.wikipedia.org ...

  6. 【转】Base64算法详解

    原文链接:https://blog.csdn.net/robertcpp/article/details/51628647 完整的BASE64定义可见RFC 1421和RFC 2045.编码后的数据比 ...

  7. java Base64算法

    Base64算法并不是加密算法,他的出现是为了解决ASCII码在传输过程中可能出现乱码的问题.Base64是网络上最常见的用于传输8bit字节码的可读性编码算法之一.可读性编码算法不是为了保护数据的安 ...

  8. Base64 算法原理,以及编码、解码【加密、解密】 介绍

    Base64编码,是我们程序开发中经常使用到的编码方法.它是一种基于用64个可打印字符来表示二进制数据的表示方法.它通常用作存储.传输一些二进制数据编码方法!也是MIME(多用途互联网邮件扩展,主要用 ...

  9. 传奇的通迅协议与base64算法

    传奇的数据根本就没加密. 只要把#(数字)!去掉,中间的那些全部减0x3c,然后,四个字节一组,每个字节取低六位组成6*4=24位,然后分成3个字节,这个是很经典的base64的算法.不过小改了一些, ...

随机推荐

  1. 程序异常捕获库 - CrashRpt

    CrashRpt.dll用来在应用程序出现异常crash时,捕获到错误. 并收集出错信息: MiniDump文件.硬件信息.系统信息.出错信息.进程信息.服务信息.驱动信息.启动信息.软件列表.端口信 ...

  2. 实现ImageView中两张图片重叠显示

    第一种XML配置 使用layer-list标签 <layer-list xmlns:android="http://schemas.android.com/apk/res/androi ...

  3. 关于v$sql_bind_capture 的问题

    ---先清空shared_pool SQL> alter system flush shared_pool; System altered. SQL> col value_STRING f ...

  4. python 替换windows换行符为unix格式

    windows 默认换行符为 \r\n; unix默认换行符为 \n; 所以当win下编辑的脚本在linux下显示末尾多了^M: 换行符修改为同一的unix格式脚本如下: def run(path,f ...

  5. pcDuino安装vnc进行远程控制

    准备工作: 已经刷好的 pcduino : 点此购买   可选用显示器或者用ssh连接,ssh连接参考 无显示器刷机与使用 1.安装x11vnc 输入下面的命令: sudo apt-get insta ...

  6. Hive JSON数据处理的一点探索

    背景   JSON是一种轻量级的数据格式,结构灵活,支持嵌套,非常易于人的阅读和编写,而且主流的编程语言都提供相应的框架或类库支持与JSON数据的交互,因此大量的系统使用JSON作为日志存储格式.   ...

  7. Centos6.4 mysql安装与配置

    安装命令: yum install mysql #安装客户端 yum install mysql-server #安装服务器 yum install mysql-devel #安装开发库 安装完成后, ...

  8. Rank of Tetris HDU--1881

    Rank of Tetris Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. "The Same Game": A Simple Game from Start to Finish

    文档视图结构 文档/视图体系结构是一个神奇的架构,通过这个架构,我们可以分离应用程序的数据和显示.文档包含了全部的数据,视图从文档获取数据并且显示给用户.针对这个游戏例子,我们得数据是游戏板和有颜色的 ...

  10. Oracle错误

    System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本 这个是我页面报的错误,请帮解答 在错误出现的时候我第一时间现在了一个oracle客户端软件,然 ...