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() { ...
随机推荐
- CoordinatorLayout自定义Bahavior特效及其源码分析
@[CoordinatorLayout, Bahavior] CoordinatorLayout是android support design包中可以算是最重要的一个东西,运用它可以做出一些不错的特效 ...
- Code First操作Mysql数据库
前面博客也讲了,自己做一个网站,选用的是MVC+EF Code First+MySql+EasyUI,先说下技术选型.一.为什么选择MVC? 因为之前自己做的系统大部分是webForm,MVC的之前也 ...
- Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较
1.概述 创建Docker镜像的方式有三种 docker commit命令:由容器生成镜像: Dockerfile文件+docker build命令: 从本地文件系统导入:OpenVZ的模板. 关于这 ...
- memcache 安装
1 下载两个文件 wget http://www.danga.com/memcached/dist/memcached-1.2.0.tar.gz wget http://www.monkey.org/ ...
- 【Zeyphr】分页查询与修改
分页查询: return this.GetDynamicListWithPaging(ParamQuery.Instance() .From("P_Resume") .AndWhe ...
- 取消Git代理设置
昨天由于在用sourceTree上传下拉代码的时候,速度实在太慢,就照着百度上的方法设置了代理,结果导致sourceTree无法访问服务器,经检查排除发现可能是因为公司网络不能使用代理,被防火墙挡住了 ...
- 转载--web前端35个jQuery小技巧!
1. 禁止右键点击$(document).ready(function(){ $(document).bind("contextmenu",function(e){ ...
- Jenkins_获取源码编译并启动服务(一)
一.安装Jenkins插件(可以手动安装,使用推荐安装容易卡死) 系统管理-->插件管理-->可选插件 Folders Plugin OWASP Markup Formatter Plug ...
- Android 自定义Activity基类与TitleBar
我们在开发App的时候有时候碰到多个界面有一个共同点的时候,比如,都有相同的TitleBar,并且TitleBar可以设置显示的文字.TitleBar上的点击事件,如果给每一个Activity都写一遍 ...
- HTML基础及一般标签
HTML 内容 Hyper Text Markup Language 超文本标记语言(包含文本.表格.图片.声音.视频等,同时也是文档) HTML 元素指的是从开始标签(start t ...