`

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的加解密函数,但在某些特定场景下,如低级系统编程或嵌入式开发,自定义实现仍有一定的价值。

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

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

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

    一个基于stm32f030单片机的AES128bit加解密算法例程, 该算法我已经验证通过并做了部分优化,该算法的加解密方式为AES-128bit/ECB/PKCS5Padding AES加密过程是先通过key进行加密,然后利用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实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。...熟悉二进制的可自己更改算法,当然加密算法更改了解密算法同样得更改

    sqlserver2005的base64加密解密函数

    Base64编码能够确保数据在传输过程中不被篡改,因为它是通过特定算法将二进制数据转换为一种标准格式的文本字符串。本文将详细讲解如何在SQL Server 2005中实现Base64的加密和解密功能。 一、Base64编码原理 Base64...

Global site tag (gtag.js) - Google Analytics