Base64加密算法

  Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
  Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式。此时,采用Base64编码具有不可读性,需要解码后才能阅读。

  Java相关参考代码如下:


import java.nio.charset.Charset;

import org.apache.commons.codec.binary.Base64;


public
class EnhancedBase64Utils { private static Charset charset = Charset.forName("utf-8"); public static String encrypt(String src) { int mask_ASCII = 0X6D; //运算掩码 int check_ASCII = 0X9C; //校验码初始值 int i = 0; byte[] streamContent = new byte[ (int) src.getBytes().length + 2]; //取得文件内容 for (i = 0; i < src.getBytes().length; i++) { streamContent[i] = src.getBytes(charset)[i]; } //对文件内容进行按位运算 for (i = 0; i < streamContent.length; i++) { check_ASCII ^= streamContent[i]; //先运算校验码 streamContent[i] ^= mask_ASCII; //再按位与或运算 } byte[] check_asciis = new byte[2]; //System.out.print(Integer.toBinaryString(check_ASCII)); byte check_ASCIIchar = (byte) check_ASCII; String checkstr = Integer.toHexString(check_ASCIIchar); if (checkstr.length() == 1) { checkstr = "0" + checkstr; } check_asciis = checkstr.getBytes(); //添加校验码 streamContent[streamContent.length - 2] = check_asciis[0]; streamContent[streamContent.length - 1] = check_asciis[1]; //输出到目标文件 return Base64.encodeBase64String(streamContent); } /** * * @param src * @return */ public static String decrypt(String src) { int mask_ASCII = 0X6D; //运算掩码 int check_ASCII = 0X9C; //校验码初始值 int i = 0; byte[] streamContent = Base64.decodeBase64(src); // //对文件内容进行按位运算 for (i = 0; i < streamContent.length - 2; i++) { streamContent[i] ^= mask_ASCII; //先按位与或运算 check_ASCII ^= streamContent[i]; //再运算校验码 } byte[] check_asciis = new byte[2]; byte check_ASCIIchar = (byte) check_ASCII; String checkstr = Integer.toHexString(check_ASCIIchar); if (checkstr.length() == 1) { checkstr = "0" + checkstr; } check_asciis = checkstr.getBytes(); //添加校验码 streamContent[streamContent.length - 2] = check_asciis[0]; streamContent[streamContent.length - 1] = check_asciis[1]; if (check_asciis[0] != streamContent[streamContent.length - 2] || check_asciis[1] != streamContent[streamContent.length - 1]) { return null; } //输出到目标文件 String dest = new String(streamContent,charset); dest = dest.substring(0, dest.length() - 2); return dest; } }

 

posted @ 2018-07-12 17:16  shawWey  阅读(2660)  评论(0编辑  收藏  举报