zoukankan      html  css  js  c++  java
  • 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; } }
  • 相关阅读:
    C#4.0和VS2010新特性
    对于大型公司项目平台选择j2ee的几层认识
    移动开发
    第四讲 GridView 72般绝技
    String字符串补0或空格
    org.apache.commons.io使用实例
    BigDecimal
    JAVA String.format 方法使用介绍
    SimpleDateFormat使用详解
    java四舍五入
  • 原文地址:https://www.cnblogs.com/shawWey/p/9300555.html
Copyright © 2011-2022 走看看