一、参考文档 :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算法加密解密,不需要修改,直接运行即可
在给定的标题"Base64 加解密算法"中,提到的是一个已经封装好的Base64加解密工具,可以处理文件和字符串。这意味着它具备两个核心功能:Base64编码和Base64解码。编码过程是将原始数据转化为Base64格式的字符串,而...
在"Base32加解密程序"中,"Base32_Decode.exe"很可能是一个执行文件,用于执行Base32编码和解码的操作。这个程序能够对输入的字符串进行Base32编码,生成一个Base32格式的字符串,同时也可以接收一个Base32编码的...
在C++中实现Base64加解密算法可以帮助开发者处理这些数据转换问题。本篇文章将深入探讨Base64的基础原理以及如何使用C++进行加解密操作。 首先,Base64的原理是将每3个字节的数据转换为4个6位的字符。由于2^6 = 64...
C++实现的跨平台Base64加解密算法&测试代码,可对字符串与二进制进行加解密运算。
base64加解密算法,输入的文字可以是加过密的,显示解密,同样可以加密文字。
Base64是一种在互联网上广泛使用的编码方式,用于将二进制数据转化为可打印的...此外,现代编程语言库通常内置了Base64的加解密函数,但在某些特定场景下,如低级系统编程或嵌入式开发,自定义实现仍有一定的价值。
一个基于stm32f030单片机的AES128bit加解密算法例程, 该算法我已经验证通过并做了部分优化,该算法的加解密方式为AES-128bit/ECB/PKCS5Padding AES加密过程是先通过key进行加密,然后利用base64方式编码变成了最终...
- RC4解密:使用相同的密钥和RC4算法,对解码后的数据进行解密,恢复出原始明文。 在实际项目开发中,你需要确保正确处理边界条件,如输入数据的长度不是3的倍数,以及Base64字符串中的填充字符。此外,为了提高...
在实际开发中,使用`java.util.Base64`的API可以方便地进行Base64加解密操作,如`Base64.getEncoder().encodeToString(byte[])`用于编码,`Base64.getDecoder().decode(String)`用于解码。对于流操作,`Base64....
本篇将详细讲解微信小程序中使用AES(Advanced Encryption Standard)ECB(Electronic Codebook)模式进行Base64编码的加密与解密操作。 首先,AES是一种广泛使用的对称加密算法,它基于块密码,每个块大小为128位...
Base64解码则是在接收端进行,将接收到的Base64字符串转换回二进制数据,然后用3DES解密还原原始数据: 1. Base64解码:将接收到的Base64字符串还原为二进制数据。 2. 3DES解密:使用相同的3个子密钥,按照逆序执行...
本篇文章将详细探讨在C++中实现3DES和Base64加解密的技术要点。 3DES(Triple Data Encryption Algorithm)是一种对称加密算法,它是DES(Data Encryption Standard)的加强版。DES使用56位的密钥,3DES通过三次...
同时,为了提高代码的可读性和维护性,源代码中应该包含详细的注释,解释各个函数和变量的作用,以及算法的关键步骤。 总的来说,这个C++ Base64库为开发者提供了一种方便的方式来编码和解码二进制数据,使其能在...
自己写的非常强大的一个加密解密工具,有DES、3DES(含ECB和CBC)、RSA、SHA1、SHA256、SHA512、MD5、CRC、base64、异或运算等
本文将详细介绍C++中SHA1、MD5和Base64加解密算法的实现及其原理。这些技术广泛应用于密码存储、数据完整性验证以及网络传输中。 首先,SHA1(Secure Hash Algorithm 1)是一种哈希函数,它接受任意长度的数据输入...
参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。...熟悉二进制的可自己更改算法,当然加密算法更改了解密算法同样得更改
为了保护数据的安全,通常会结合使用其他加密算法,如AES(高级加密标准),先将数据加密,然后再进行Base64编码,这样即使数据被截获,没有密钥也无法解密。 总的来说,这个纯JavaScript的Base64加密解密工具类为...