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; } }
  • 相关阅读:
    Leetcode单链表反转
    算法--二叉搜索树的python实现
    云服务器(阿里和腾讯)搭建网络云盘Nextcloud
    VGG16和集成模型(LeNet,CNN,Net均匀池化)比较
    git与github
    pyspider-崔庆才猫途鹰
    给 Python 添加进度条 | 给小白的 tqdm 精炼实例!
    @wraps 修饰器:让你的 Python 代码更加简短可爱 | 从简单实例来认识它
    并发和并行 | Python中实现多线程 threading 和多进程 multiprocessing
    Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式
  • 原文地址:https://www.cnblogs.com/shawWey/p/9300555.html
Copyright © 2011-2022 走看看