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

Base64加密算法的更多相关文章

  1. Base64加密算法封装

    /// <summary>/// 实现Base64加密解密/// </summary>public sealed class Base64{/// <summary> ...

  2. 【字符编码】字符编码 && Base64编码算法

    一.前言 在前面的解决乱码的一文中,只找到了解决办法,但是没有为什么,说白了,就是对编码还是不是太熟悉,编码问题是一个很简单的问题,计算机从业人员应该也必须弄清楚,基于编码的应用有Base64加密算法 ...

  3. JavaScript Base64加解密

    Base64加密算法是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信 ...

  4. IOS常见的加密方法,常用的MD5和Base64

    iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...

  5. 使用Apache commons-codec Base64实现加解密(转)

    commons-codec是Apache下面的一个加解密开发包 官方地址为:http://commons.apache.org/codec/ 官方下载地址:http://commons.apache. ...

  6. 第二章 Base64与URLBase64

    2.1.算法基本规则: 加密的算法公开 加密的密钥不公开 Base64算法公开.密钥也公开的特性不符合基本算法规则,所以很容易被破解,所以一般不用于企业级的加密操作. 注意:具体的算法与密钥(对于Ba ...

  7. Base64和3DES算法

    Base64加密算法 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.它的优点是算法效率高,编码出来的结果比较简短,同时也具有不可读性. ...

  8. 《PHP 实现 Base64 编码/解码》笔记

    前言 早在去年 11 月底就已经看过<PHP 实现 Base64 编码/解码>这篇文章了,由于当时所掌握的位运算知识过于薄弱,所以就算是看过几遍也是囫囵吞枣一般,不出几日便忘记了其滋味. ...

  9. Shade勒索病毒 中敲诈病毒解密 如 issbakev9_Data.MDF.id-A1E.f_tactics@aol.com.xtbl 解决方法

    [客户名称]:福建福州市某烘焙连锁企业 [软件名称]:思迅烘焙之星V9总部 [数据库版本]:MS SQL server 2000  [数据库大小]:4.94GB [问题描述]:由于客户服务器安全层薄弱 ...

随机推荐

  1. What's the difference between UTF-8 and UTF-8 without BOM?

    https://stackoverflow.com/questions/2223882/whats-the-difference-between-utf-8-and-utf-8-without-bom ...

  2. PAT1037. Magic Coupon (25)

    #include <iostream> #include <algorithm> #include <vector> using namespace std; in ...

  3. nginx限制ip并发数

    nginx限制ip并发数,也是说限制同一个ip同时连接服务器的数量 1.添加limit_zone 这个变量只能在http使用 vi /usr/local/nginx/conf/nginx.conf l ...

  4. ExtJS Ext.Ajax.request最好设为同步

    ExtJS 中Ext.Ajax.request最好设为同步,即async: false,因为如果Ajax后面需要用到Ajax更新的数据的话,设置同步,后面才能用到最新的数据. function Get ...

  5. Kubernetes学习整理

    修改镜像仓库 官方提供的时google源,显然是无法使用的.这里需要改成国内的源 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kube ...

  6. codeforces 831B. Keyboard Layouts 解题报告

    题目链接:http://codeforces.com/contest/831/problem/B 题目意思:给出两个长度为26,由小写字母组成的字符串s1和s2,对于给出的第三个字符串s3,写出对应s ...

  7. crm开发(基于ssh)(2)

    今天内容 1 新增客户 2 客户列表 3 修改客户 4 删除客户 5 分页显示客户列表 Hibernate模板里面的方法 1 新增客户 配置 <mapping resource="cn ...

  8. 【python教程】Python IDE

    PyCharm PyCharm是由JetBrains打造的一款Python IDE. PyCharm具备一般 Python IDE 的功能,比如:调试.语法高亮.项目管理.代码跳转.智能提示.自动完成 ...

  9. Prism初研究之使用Prism实现WPF的MVVM模式

    转自:http://www.cnblogs.com/qianzi067/p/5804880.html

  10. 转:A/B测试:实现方法

    概念:http://www.aliued.cn/2010/09/13/ab-testing-basic-concept.html 我们先来看一个图: (注:感谢Algo提供本图.) 上图展示了 A/B ...