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 [问题描述]:由于客户服务器安全层薄弱 ...
随机推荐
- [HAOI2007]反素数ant
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1907 Solved: 1069[Submit][St ...
- java基础(3)--8种基本类型
八种基本类型 数据类型分为两大类:基本类型,引用类型 基本类型有8种,除了基本类型(8种)以外任何类型都是引用类型.如: String 是引用类型 基本类型有8种(首字母是小写): 整数:byte, ...
- quartz(4)--quartz.properties文件
Quartz有一个叫做quartz.properties的配置文件,它允许你修改框架运行时环境.缺省是使用Quartz.jar里面的quartz.properties文件.当然你应该创建一个quart ...
- python学习(一)——python与人工智能
最近在朋友圈转起了一张图.抱着试一试的心态,我肝了些课程.都是与python相关的. 课程一:你不知道的python 讲师:王玉杰 (混沌巡洋舰联合创始人 & web ...
- Sqrt(X),求平方根,折半查找
算法分析:利用折半查找,降低算法复杂度.前面求x得y次幂,也是将y/2,都是为了降低复杂度. //折半查找的思想 public class Sqrt { public int sqrt(int x) ...
- 使用SpringMVC的crud操作时,进行数据修改,但是修改成功后,页面无法显示lastName属性值(被修改的那条记录)
我这个错误的原因在于,把map的键写错了,它必须和类名第一个字母小写相同 @ModelAttribute public void getEmployee(@RequestParam(value=&qu ...
- 火车头采集器db3导出sql语句
1.通过火狐 sqlite mananger工具,将.db3文件,导出为.sql文件2.右击表面content,属性:Export table 3.不要勾选 include create table. ...
- ArcGIS API For Silverlight使用在线地图的多种方法总结
引自:http://www.cnblogs.com/meimao5211/p/3283969.html ArcGIS API For Silverlight使用在线地图的多种方法总结 本人也正在学习A ...
- datagrid拖动列头更换排列顺序
在做这个功能的时候在网上找了大量资料,发现都不适用,要不然就是代码太冗余,所以另起炉灶,自己封装了这个函数 下面是完整的代码: <!DOCTYPE html> <html> & ...
- Forms and Reports Developer 10g Certified on Windows 10 for EBS 12.x
Forms Developer 10g and Reports Developer 10g are now certified on Windows 10 desktops for E-Busines ...