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 = ;
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加密算法的更多相关文章
- Base64加密算法封装
/// <summary>/// 实现Base64加密解密/// </summary>public sealed class Base64{/// <summary> ...
- 【字符编码】字符编码 && Base64编码算法
一.前言 在前面的解决乱码的一文中,只找到了解决办法,但是没有为什么,说白了,就是对编码还是不是太熟悉,编码问题是一个很简单的问题,计算机从业人员应该也必须弄清楚,基于编码的应用有Base64加密算法 ...
- JavaScript Base64加解密
Base64加密算法是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于在HTTP环境下传递较长的标识信 ...
- IOS常见的加密方法,常用的MD5和Base64
iOS代码加密常用加密方式 iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密.AES加密.BASE64加密,三大算法iOS代码加密是如何进行加密的,且看下文 MD5 iO ...
- 使用Apache commons-codec Base64实现加解密(转)
commons-codec是Apache下面的一个加解密开发包 官方地址为:http://commons.apache.org/codec/ 官方下载地址:http://commons.apache. ...
- 第二章 Base64与URLBase64
2.1.算法基本规则: 加密的算法公开 加密的密钥不公开 Base64算法公开.密钥也公开的特性不符合基本算法规则,所以很容易被破解,所以一般不用于企业级的加密操作. 注意:具体的算法与密钥(对于Ba ...
- Base64和3DES算法
Base64加密算法 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息.它的优点是算法效率高,编码出来的结果比较简短,同时也具有不可读性. ...
- 《PHP 实现 Base64 编码/解码》笔记
前言 早在去年 11 月底就已经看过<PHP 实现 Base64 编码/解码>这篇文章了,由于当时所掌握的位运算知识过于薄弱,所以就算是看过几遍也是囫囵吞枣一般,不出几日便忘记了其滋味. ...
- Shade勒索病毒 中敲诈病毒解密 如 issbakev9_Data.MDF.id-A1E.f_tactics@aol.com.xtbl 解决方法
[客户名称]:福建福州市某烘焙连锁企业 [软件名称]:思迅烘焙之星V9总部 [数据库版本]:MS SQL server 2000 [数据库大小]:4.94GB [问题描述]:由于客户服务器安全层薄弱 ...
随机推荐
- iOS项目开发优秀文章汇总
UI界面 iOS和Android 界面设计尺寸规范 http://www.alibuybuy.com/posts/85486.html iPhone app界面设计尺寸规范 http://www. ...
- 详解Linux系统中的文件名和文件种类以及文件权限
Linux文件种类与副文件名 一直强调一个概念,那就是:任何装置在Linux底下都是文件, 不仅如此,连资料沟通的介面也有专属的文件在负责-所以,你会瞭解到,Linux的文件种类真的很多- 除了前面提 ...
- 微信小程序选择器
- Java中List集合的常用方法
List接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来. 这篇文章就不讲继承Collection接口的那些方法了 https://www.cnblo ...
- java 实现JSON数据格式化
关键在于好的算法这个代码来源于网络,算法已在注释中添加. 工具地址: 链接:https://pan.baidu.com/s/1Ns3cqi0SG3qSqatrZBrl4A 提取码:2enp 复制这段内 ...
- d3.js学习笔记(五)——将数据结构化为D3.js可处理的
目标 在这一章,你将会理解如何对数据进行结构化,来更好的使用D3.js. 我们将会回顾我们之前已经学习的,学习D3.js如何使用选集(selections),JavaScript对象基础,以及如何最优 ...
- Tomcat中HTTP与AJP区别
Tomcat: HTTP与AJP区别 Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户. 默 ...
- 不合法的请求字符,不能包含\uxxxx格式的字符
不合法的请求字符,不能包含\uxxxx格式的字符 ,不支持数组转json_encode()格式, 需要直接将数组,拼合成 json格式 ** * 微信api不支持中文转义的json结构 * @para ...
- 装饰类——wpf
decorator:在元素“周围”设置外边框.背景或者二者. adorner:在已存在的Visual “之上”叠加Visual. AdornerDecorator:为可视化树中其下面的元素提供一个装 ...
- iOS-沙盒路径
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么.documents,tmp,app,Library.(NSHomeDirectory() ...