`

Base32加解密算法

    博客分类:
  • java
 
阅读更多

一、参考文档 :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算法加密解密

    c++实现base64算法加密解密,不需要修改,直接运行即可

    Base64 加解密算法

    在给定的标题"Base64 加解密算法"中,提到的是一个已经封装好的Base64加解密工具,可以处理文件和字符串。这意味着它具备两个核心功能:Base64编码和Base64解码。编码过程是将原始数据转化为Base64格式的字符串,而...

    Base32加解密程序

    在"Base32加解密程序"中,"Base32_Decode.exe"很可能是一个执行文件,用于执行Base32编码和解码的操作。这个程序能够对输入的字符串进行Base32编码,生成一个Base32格式的字符串,同时也可以接收一个Base32编码的...

    Base64加解密算法(C++)

    在C++中实现Base64加解密算法可以帮助开发者处理这些数据转换问题。本篇文章将深入探讨Base64的基础原理以及如何使用C++进行加解密操作。 首先,Base64的原理是将每3个字节的数据转换为4个6位的字符。由于2^6 = 64...

    Base64加解密算法

    C++实现的跨平台Base64加解密算法&测试代码,可对字符串与二进制进行加解密运算。

    base64加解密算法

    base64加解密算法,输入的文字可以是加过密的,显示解密,同样可以加密文字。

    Base64 加密 解密 算法及源码

    Base64是一种在互联网上广泛使用的编码方式,用于将二进制数据转化为可打印的...此外,现代编程语言库通常内置了Base64的加解密函数,但在某些特定场景下,如低级系统编程或嵌入式开发,自定义实现仍有一定的价值。

    基于stm32f030单片机的AES128bit加解密算法例程

    一个基于stm32f030单片机的AES128bit加解密算法例程, 该算法我已经验证通过并做了部分优化,该算法的加解密方式为AES-128bit/ECB/PKCS5Padding AES加密过程是先通过key进行加密,然后利用base64方式编码变成了最终...

    (VS2010 C++)基于RC4和Base64的加解密算法实现,可用于项目开发

    - RC4解密:使用相同的密钥和RC4算法,对解码后的数据进行解密,恢复出原始明文。 在实际项目开发中,你需要确保正确处理边界条件,如输入数据的长度不是3的倍数,以及Base64字符串中的填充字符。此外,为了提高...

    base64加解密

    在实际开发中,使用`java.util.Base64`的API可以方便地进行Base64加解密操作,如`Base64.getEncoder().encodeToString(byte[])`用于编码,`Base64.getDecoder().decode(String)`用于解码。对于流操作,`Base64....

    微信小程序 AES ECB base64 加密解密

    本篇将详细讲解微信小程序中使用AES(Advanced Encryption Standard)ECB(Electronic Codebook)模式进行Base64编码的加密与解密操作。 首先,AES是一种广泛使用的对称加密算法,它基于块密码,每个块大小为128位...

    3DES+Base64加密解密算法

    Base64解码则是在接收端进行,将接收到的Base64字符串转换回二进制数据,然后用3DES解密还原原始数据: 1. Base64解码:将接收到的Base64字符串还原为二进制数据。 2. 3DES解密:使用相同的3个子密钥,按照逆序执行...

    C++ 实现 3DES加解密Base64加解密

    本篇文章将详细探讨在C++中实现3DES和Base64加解密的技术要点。 3DES(Triple Data Encryption Algorithm)是一种对称加密算法,它是DES(Data Encryption Standard)的加强版。DES使用56位的密钥,3DES通过三次...

    Base64加解密算法类(C++)

    同时,为了提高代码的可读性和维护性,源代码中应该包含详细的注释,解释各个函数和变量的作用,以及算法的关键步骤。 总的来说,这个C++ Base64库为开发者提供了一种方便的方式来编码和解码二进制数据,使其能在...

    加密解密算法工具集

    自己写的非常强大的一个加密解密工具,有DES、3DES(含ECB和CBC)、RSA、SHA1、SHA256、SHA512、MD5、CRC、base64、异或运算等

    SHA1加密,MD5加密,base64加解密的C++实现类

    本文将详细介绍C++中SHA1、MD5和Base64加解密算法的实现及其原理。这些技术广泛应用于密码存储、数据完整性验证以及网络传输中。 首先,SHA1(Secure Hash Algorithm 1)是一种哈希函数,它接受任意长度的数据输入...

    Base64加密解密java/js

    参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。...熟悉二进制的可自己更改算法,当然加密算法更改了解密算法同样得更改

    js的base64加密解密

    为了保护数据的安全,通常会结合使用其他加密算法,如AES(高级加密标准),先将数据加密,然后再进行Base64编码,这样即使数据被截获,没有密钥也无法解密。 总的来说,这个纯JavaScript的Base64加密解密工具类为...

Global site tag (gtag.js) - Google Analytics