一、参考文档 :http://hi.baidu.com/xiaoyaoyiyiyun/item/1df00a0dba2e7c78bfe97ef7
二、代码实现:
Base32.java
package com.xiaxing.learning.Base32;
public class Base32 {
private static final char[] ALPHABET = {
'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', '2', '3', '4', '5', '6', '7'
};
private static final byte[] DECODE_TABLE;
static {
DECODE_TABLE = new byte[128];
for (int i = 0; i < DECODE_TABLE.length; i++) {
DECODE_TABLE[i] = (byte)0xFF;
}
for (int i = 0; i < ALPHABET.length; i++) {
DECODE_TABLE[(int)ALPHABET[i]] = (byte)i;
if (i < 24) {
DECODE_TABLE[(int)Character.toLowerCase(ALPHABET[i])] = (byte)i;
}
}
}
public static String encode(byte[] data) {
char[] chars = new char[((data.length * 8) / 5) + ((data.length % 5) != 0 ? 1 : 0)];
for (int i = 0, j = 0, index = 0; i < chars.length; i++) {
if (index > 3) {
int b = data[j] & (0xFF >> index);
index = (index + 5) % 8;
b <<= index;
if (j < data.length - 1) {
b |= (data[j + 1] & 0xFF) >> (8 - index);
}
chars[i] = ALPHABET[b];
j++;
} else {
chars[i] = ALPHABET[((data[j] >> (8 - (index + 5))) & 0x1F)];
index = (index + 5) % 8;
if (index == 0) {
j++;
}
}
}
return new String(chars);
}
public static byte[] decode(String s) throws Exception {
char[] stringData = s.toCharArray();
byte[] data = new byte[(stringData.length * 5) / 8];
for (int i = 0, j = 0, index = 0; i < stringData.length; i++) {
int val;
try {
val = DECODE_TABLE[stringData[i]];
} catch (ArrayIndexOutOfBoundsException e) {
throw new Exception("Illegal character");
}
if (val == 0xFF) {
throw new Exception("Illegal character");
}
if (index <= 3) {
index = (index + 5) % 8;
if (index == 0) {
data[j++] |= val;
}
else {
data[j] |= val << (8 - index);
}
} else {
index = (index + 5) % 8;
data[j++] |= (val >> index);
if (j < data.length) {
data[j] |= val << (8 - index);
}
}
}
return data;
}
}
Base32Test.java
package com.xiaxing.learning.Base32;
import java.io.UnsupportedEncodingException;
public class Base32Test {
public static class Logger {
public Logger() {
}
public static void v(String string) {
System.out.println(string);
return;
}
}
public static void main(String[] args) {
String input = "bhst";
byte[] inputBuf = input.getBytes();
try {
String s = new String(inputBuf, "utf-8");
Logger.v("s : " + s);
} catch (UnsupportedEncodingException e1) {}
String encoded = Base32.encode(inputBuf);
try {
byte[] outputBuf = Base32.decode(encoded);
String s = new String(outputBuf, "utf-8");
Logger.v("s : " + s);
} catch (Exception e) {
Logger.v("Illegal character");
}
}
}
分享到:
相关推荐
c++实现base64算法加密解密,不需要修改,直接运行即可
本工程是基于RC4和Base64的加解密算法实现,可用于项目开发,包含完整的工程文件。包含RC4和Base64算法文件,有具体的demo实现。
C++实现的跨平台Base64加解密算法&测试代码,可对字符串与二进制进行加解密运算。
用C语言实现的一个Base64加解密的算法。 项目上用到,就写了一个。拿出来同时给大家分享。
Base64加解密算法类,附有详细注释!
C++的Base64加解密算法类,包含有详细的注释!
base64加解密算法,输入的文字可以是加过密的,显示解密,同样可以加密文字。
封装比较好的base64加解密算法, 可是实现对文件、字符串的base64算法, 在实现对文件的算法中,虽然引用了MFC的库函数(用于读写文件),但是这个可以把MFC的库函数去掉,功能相当完美
C++实现了SHA1加密算法,MD5加密算法和base64加解密算法类。 程序中做了测试, 绝对可用。
iOS 加密、解密,采用3DES BASE64算法,作为收藏资源
参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。...熟悉二进制的可自己更改算法,当然加密算法更改了解密算法同样得更改
base64加密和解密算法完整事例代码,base64加密和解密算法完整事例代码
NULL 博文链接:https://geyubin.iteye.com/blog/1039116
一个基于stm32f030单片机的AES128bit加解密算法例程, 该算法我已经验证通过并做了部分优化,该算法的加解密方式为AES-128bit/ECB/PKCS5Padding AES加密过程是先通过key进行加密,然后利用base64方式编码变成了最终...
是标准的AES算法,支持在线AES加解密网站互解。 本源码从CSDN一位前辈的源码基础上做了更改,增加支持加密返回BASE64,更加完善。在此感谢原作者: http://download.csdn.net/download/qiaohaidong/9477264 需要注意...
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的详细规范。 Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,...
base64加密、解密。 base库中的实现。
Base64加密&解密工具,可以用以验证咱编写Base64加密&解密程序的正确性。
C++版的Base64加解密类,提供详细的代码注释,有助于二次使用!