java Base64算法的使用
Base64是常见的网络加密算法,Base64编码可用于在HTTP环境下传递较长的标识信息。详见 Base64介绍
1 自定义的base64算法
Base64Encrypt.java
public class Base64Encrypt {
private static final String CODES = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
// base64解密
private static byte[] base64Decode(String input) {
if (input.length() % != ) {
throw new IllegalArgumentException("Invalid base64 input");
}
byte decoded[] = new byte[((input.length() * ) / )
- (input.indexOf('=') > ? (input.length() - input.indexOf('=')) : )];
char[] inChars = input.toCharArray();
int j = ;
int b[] = new int[];
for (int i = ; i < inChars.length; i += ) {
// This could be made faster (but more complicated) by precomputing
// these index locations.
b[] = CODES.indexOf(inChars[i]);
b[] = CODES.indexOf(inChars[i + ]);
b[] = CODES.indexOf(inChars[i + ]);
b[] = CODES.indexOf(inChars[i + ]);
decoded[j++] = (byte) ((b[] << ) | (b[] >> ));
if (b[] < ) {
decoded[j++] = (byte) ((b[] << ) | (b[] >> ));
if (b[] < ) {
decoded[j++] = (byte) ((b[] << ) | b[]);
}
}
}
return decoded;
}
// base64加密
private static String base64Encode(byte[] in) {
StringBuilder out = new StringBuilder((in.length * ) / );
int b;
for (int i = ; i < in.length; i += ) {
b = (in[i] & 0xFC) >> ;
out.append(CODES.charAt(b));
b = (in[i] & 0x03) << ;
if (i + < in.length) {
b |= (in[i + ] & 0xF0) >> ;
out.append(CODES.charAt(b));
b = (in[i + ] & 0x0F) << ;
if (i + < in.length) {
b |= (in[i + ] & 0xC0) >> ;
out.append(CODES.charAt(b));
b = in[i + ] & 0x3F;
out.append(CODES.charAt(b));
} else {
out.append(CODES.charAt(b));
out.append('=');
}
} else {
out.append(CODES.charAt(b));
out.append("==");
}
}
return out.toString();
}
测试代码:
public static void main(String[] args) {
String input = "we are a team.";
String encode = base64Encode(input.getBytes());
System.out.println("encode: " + encode);
String decode = new String(base64Decode(encode));
System.out.println("decode: " + decode);
}
2 bcprov的Base64算法
引入bcprov-jdk15on-154.jar,提供对base64算法的支持
bcprov-jdk15on-154.jar地址: https://commons.apache.org/proper/commons-codec/download_codec.cgi
测试代码:
String input ="we are a team .";
byte[] encodeBytes = org.bouncycastle.util.encoders.Base64.encode(input.getBytes());
System.out.println("encode: " + new String(encodeBytes)); byte[] decodeBytes = org.bouncycastle.util.encoders.Base64.decode(encodeBytes);
System.out.println("decode: " + new String(decodeBytes));
java Base64算法的使用的更多相关文章
- java Base64算法
Base64算法并不是加密算法,他的出现是为了解决ASCII码在传输过程中可能出现乱码的问题.Base64是网络上最常见的用于传输8bit字节码的可读性编码算法之一.可读性编码算法不是为了保护数据的安 ...
- java base64加解密
接上篇java Base64算法. 根据之前过程使用base64加解密,所以写成了工具类. 代码示例; public class Base64Util { private static Logger ...
- java基础---->Base64算法的使用
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.详细的Base64信息,可以参见维基百科:https://en.wikipedia.org ...
- Base64算法
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/4288372.html ...
- MD5加密算法(信息摘要算法)、Base64算法
1 什么是MD5 信息摘要算法,可以将字符进行加密,每个加密对象在进行加密后都是等长的 应用场景:将用户密码经过MD5加密后再存储到数据库中,这样即使是超级管理员也没有能力知道用户的具体密码是多少:因 ...
- Java Base64、HMAC、SHA1、MD5、AES DES 3DES加密算法
● BASE64 严格地说,属于编码格式,而非加密算法 ● MD5(Message Digest algorithm 5,信息摘要算法) ● SHA(Secure Hash Algo ...
- 史上最全的java随机数生成算法分享(转)
这篇文章主要介绍了史上最全的java随机数生成算法,我分享一个最全的随机数的生成算法,最代码的找回密码的随机数就是用的这个方法 String password = RandomUtil.generat ...
- MD5加密、时间戳转换、base64算法加密、解密
#region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="str"& ...
- 常用Java排序算法
常用Java排序算法 冒泡排序 .选择排序.快速排序 package com.javaee.corejava; public class DataSort { public DataSort() { ...
随机推荐
- 十分钟掌握Activity的生命周期与启动模式
1. Activity的生命周期 正常情况下的Activity生命周期如下图所示(来自Android Developer): 当资源相关的系统配置变更时(比如设备屏幕方向改变,键盘可见性变化),会导致 ...
- 深入grootJs(进阶教程)
深入grootJs 这篇教程的原则是把grootJs原理讲透,主要真正理解了原理才能用起来随心所欲 mvvm模式简介 grootJs的vm结构 扫描函数sweep 垃圾回收的原理 加载器中的预编 ,控 ...
- Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较
1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这 ...
- Form表单提交的简要方式
<html> <head> <meta name="viewport" content="width=device-width" ...
- STL数组处理常用函数
reverse(a,a+n)反转 sort(a,a+n,cmp)排序 unique(a,a+n,cmp)对于有序集合进行去重,返回新数组最后一个元素的指针 next_permutatoin(a,a+n ...
- 别名现象,java对象之间的相互赋值
请看一下代码 import java.util.*; class book{ static int c = null; } public static void main(String[] args ...
- 50ms延时程序
12MHz晶振 一个机器周期2us, DEL: MOV R7,#200D DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2 ;125*2=250us DJNZ R7,DE ...
- Ubuntu14.04下安装Hadoop2.4.0 (单机模式)
一.在Ubuntu下创建hadoop组和hadoop用户 增加hadoop用户组,同时在该组里增加hadoop用户,后续在涉及到hadoop操作时,我们使用该用户. 1.创建hadoop用户组 2.创 ...
- Mvc多级Views目录 asp.net mvc4 路由重写及 修改view 的寻找视图的规则
一般我们在mvc开发过程中,都会碰到这样的问题.页面总是写在Views文件夹下,而且还只能一个Controller的页面只能写在相应的以Controller名命名的文件夹下.如果我们写到别处呢?那么肯 ...
- [转]Spring3核心技术之事务管理机制
原文地址:http://chouyi.iteye.com/blog/1675199 Spring对事务的解决办法其实分为2种:编程式实现事务,AOP配置声明式解决方案. http://jinnians ...