Base64编解码工具
/*** base64编解码器*/
public final class Base64Util {private static final char[] ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();private static final char LAST2BYTE = (char) Integer.parseInt("00000011", 2);private static final char LAST4BYTE = (char) Integer.parseInt("00001111", 2);private static final char LAST6BYTE = (char) Integer.parseInt("00111111", 2);private static final char LEAD6BYTE = (char) Integer.parseInt("11111100", 2);private static final char LEAD4BYTE = (char) Integer.parseInt("11110000", 2);private static final char LEAD2BYTE = (char) Integer.parseInt("11000000", 2);private static final char[] ENCODE_TABLE = new char[] { 'A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q','R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd','e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q','r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3','4', '5', '6', '7', '8', '9', '+', '/' };private static int[] toInt = new int[128];static {for (int i = 0; i < ALPHABET.length; i++) {toInt[ALPHABET[i]] = i;}}/*** Base64 encoding.** @param from* The src data.* @return cryto_str*/public static String encode(byte[] from) {StringBuilder to = new StringBuilder((int) (from.length * 1.34) + 3);int num = 0;char currentByte = 0;for (int i = 0; i < from.length; i++) {num = num % 8;while (num < 8) {switch (num) {case 0:currentByte = (char) (from[i] & LEAD6BYTE);currentByte = (char) (currentByte >>> 2);break;case 2:currentByte = (char) (from[i] & LAST6BYTE);break;case 4:currentByte = (char) (from[i] & LAST4BYTE);currentByte = (char) (currentByte << 2);if ((i + 1) < from.length) {currentByte |= (from[i + 1] & LEAD2BYTE) >>> 6;}break;case 6:currentByte = (char) (from[i] & LAST2BYTE);currentByte = (char) (currentByte << 4);if ((i + 1) < from.length) {currentByte |= (from[i + 1] & LEAD4BYTE) >>> 4;}break;default:break;}to.append(ENCODE_TABLE[currentByte]);num += 6;}}if (to.length() % 4 != 0) {for (int i = 4 - to.length() % 4; i > 0; i--) {to.append("=");}}return to.toString();}/*** Translates the specified Base64 string into a byte array.** @param s the Base64 string (not null)* @return the byte array (not null)*/public static byte[] decode(String s) {int delta = s.endsWith( "==" ) ? 2 : s.endsWith( "=" ) ? 1 : 0;byte[] buffer = new byte[s.length() * 3 / 4 - delta];int mask = 0xFF;int index = 0;for (int i = 0; i < s.length(); i += 4) {int c0 = toInt[s.charAt( i )];int c1 = toInt[s.charAt( i + 1)];buffer[index++] = (byte)(((c0 << 2) | (c1 >> 4)) & mask);if (index >= buffer.length) {return buffer;}int c2 = toInt[s.charAt( i + 2)];buffer[index++] = (byte)(((c1 << 4) | (c2 >> 2)) & mask);if (index >= buffer.length) {return buffer;}int c3 = toInt[s.charAt( i + 3 )];buffer[index++] = (byte)(((c2 << 6) | c3) & mask);}return buffer;}
}
Base64编解码工具相关推荐
- base64 decode java_Java实现Base64编解码
为什么要用Base64编码 在网络中传输数据都是使用ascii方式传输.对于一些图片.视频等数据,可能就会被编码成ascii中不可见部分的编码.网络中不同的路由设备处理方式不同,有可能就会把这部分数据 ...
- Jva编解码,加密工具类大全(Base64编解码,URL 编解码,sha56_Hmac加密,MD5对字符串进行加密,java自带类实现SHA-256方式加密)
Base64编解码 /*** Base64编码.*/public static String encodeBase64(byte[] input) {return new String(Base64. ...
- Java 8实现BASE64编解码
Java 8实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Java一直缺少BASE64编码 API,以至于通常在项目开发中会选用 ...
- Notepad++插件Base64编解码
我们平常进行Base64编码需要自己写代码转换, 或者使用其他人编写的小工具程序, 也可以使用在线base64编码工具, 现在我们还可以使用Notepad++自带的插件, 进行Base64编码和解码, ...
- 【cue语言系列学习】base64编解码
[cue语言系列学习]base64编解码 release author: ningan123 release time: 2022-08-14 在线运行 工具 三种不同的输出方式,输出的结果是不一样的 ...
- 通过OpenSSL的接口实现Base64编解码
对openssl genrsa产生的rsa私钥pem文件,使用普通的base64解码会有问题,如使用https://blog.csdn.net/fengbingchun/article/details ...
- Java实现BASE64编解码
Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...
- python 图片base64 编解码,转换成Opencv,PIL.Image图片格式
Python PIL.Image和OpenCV图像格式相互转换 二进制打开图片文件,base64编解码转成Opencv格式: # coding: utf-8 import base64 import ...
- Delphi 自带的 Base64 编解码函数
今天帮别人解决一个关于 Base64 编解码的问题,竟然发现 Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个 ...
最新文章
- Microbiome:掠食性粘细菌通过调节土壤微生物群落来控制黄瓜枯萎病
- matlab绘制sign函数,MATLAB的Symbolic Math Toolbox详解
- 用 Flutter 开发真的NX
- user-select属性用法
- 使用外星人进行测试:如何使用Arquillian测试JPA类型转换器
- 在eclipse中使用hadoop插件
- NFS部署及优化(一)
- 简单英文题 16 Maximum Sum Not Exceeding K(python)
- Spring自学日志00(Spring配置文件头及xsd文件版本浅析)
- Android 系统(89)---ART
- 指针和和一般的数据传递
- Cubieboard通过aria2和minidlna来架设家庭媒体中心
- 亚当·斯密 传奇一生
- 原生JS如何在在指定位置插入元素,前面、后面
- 卸载精灵(bue directx) r4.0 完美版 绿色
- CNVD-2020-46552 深信服EDR远程代码执行漏洞复现
- 分布式系统实践学习总结
- 海信将在柏林IFA推出屏幕发声激光电视
- HTML5如何实现img标签中的图片根据屏幕大小显示相应部分的内容,并保证核心内容可见
- scrapy的crawlspider爬虫