BASE64加解密实现方法
来源:互联网 发布:淘宝怎么卖话费 编辑:程序博客网 时间:2024/06/05 07:26
public class BASE64Encoder {
/**
* 将原始数据编码为base64编码
*/
static public char[] encode(byte[] data)
{
char[] out = new char[((data.length + 2) / 3) * 4];
for (int i = 0, index = 0; i < data.length; i += 3, index += 4)
{
boolean quad = false;
boolean trip = false;
int val = (0xFF & (int) data[i]);
val <<= 8;
if ((i + 1) < data.length)
{
val |= (0xFF & (int) data[i + 1]);
trip = true;
}
val <<= 8;
if ((i + 2) < data.length)
{
val |= (0xFF & (int) data[i + 2]);
quad = true;
}
out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)];
val >>= 6;
out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)];
val >>= 6;
out[index + 1] = alphabet[val & 0x3F];
val >>= 6;
out[index + 0] = alphabet[val & 0x3F];
}
return out;
}
/**
* 将base64编码的数据解码成原始数据
*/
static public byte[] decode(char[] data)
{
int len = ((data.length + 3) / 4) * 3;
if(data.length > 0 && data[data.length - 1] == '=')
--len;
if(data.length > 1 && data[data.length - 2] == '=')
--len;
byte[] out = new byte[len];
int shift = 0;
int accum = 0;
int index = 0;
for(int ix = 0; ix < data.length; ix++)
{
int value = codes[data[ix] & 0xFF];
if(value >= 0)
{
accum <<= 6;
shift += 6;
accum |= value;
if(shift >= 8)
{
shift -= 8;
out[index++] = (byte)((accum >> shift) & 0xff);
}
}
}
if(index != out.length)
throw new Error("miscalculated data length!");
return out;
}
static private char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray();
static private byte[] codes = new byte[256];
static {
for (int i = 0; i < 256; i++)
codes[i] = -1;
for (int i = 'A'; i <= 'Z'; i++)
codes[i] = (byte) (i - 'A');
for (int i = 'a'; i <= 'z'; i++)
codes[i] = (byte) (26 + i - 'a');
for (int i = '0'; i <= '9'; i++)
codes[i] = (byte) (52 + i - '0');
codes['+'] = 62;
codes['/'] = 63;
}
public static void main(String[] args) throws Exception
{
//加密成base64
String strSrc = "time=20160220&doctorid=8907";
String strOut = new String(encode(strSrc.getBytes()));
System.out.println(strOut);
System.out.println(HMACSHA1.getSignature(strOut, "dingdingyisheng1234"));
String strOut2 = new String(decode(strOut.toCharArray()));
System.out.println(strOut2);
}
}
0 0
- base64加、解密实现方法
- BASE64加解密实现方法
- Base64加解密方法
- Base64加解密的方法
- 加解密之Base64实现
- JS实现Base64加解密
- Java中的Base64加解密方法
- base64加解密的三种方法
- Base64加解密的实现方式
- 利用Java实现Base64加解密
- base64加解密
- Base64加解密详解
- base64加解密
- Base64 加解密
- Base64加解密
- base64加解密
- base64加解密
- c base64加解密
- HDU 5630 Rikka with Chess
- 2016.2.20 面试归来
- Android_Fragment
- android基础学习综合实例——天气预报App(基本功能实现)
- fishhook
- BASE64加解密实现方法
- Android学习心得第一课
- 背包的第k优解问题
- iOS 开发 -- Swift 语法篇 (一) 常量和变量
- Memcached
- Cocos2d-x ListView 的添加,删除,点击和滑动到头和尾监听
- 信号量——POSIX 与 System V的接口对比分析
- vs2015 + BabeLua + Cocos2d-x 3.10配置
- 2016年阅读书单(一)