为了节约带宽、加快传送速度,http协议支持gzip的压缩,但假设我们的app与后台不是通过http协议通讯的。那么压缩、解压这个流程须要自己写。以下给出compress和decompress的代码:

   public static byte[] compress(byte[] data) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 压缩
GZIPOutputStream gos = new GZIPOutputStream(baos);
gos.write(data, 0, data.length);
gos.finish();
baos.flush();
baos.close();
return <span style="font-family: Arial, Helvetica, sans-serif;">baos.toByteArray()</span><span style="font-family: Arial, Helvetica, sans-serif;">; </span>
}
   public static byte[] decompress(byte[] data) throws Exception {
GZIPInputStream bis = new GZIPInputStream(new ByteInputStream(data, data.length));
ByteArrayOutputStream bos=new ByteArrayOutputStream();
byte[] buf=new byte[20480];
int len=0;
while ((len=bis.read(buf))>0){
bos.write(buf, 0, len);
}
bis.close();
bos.close();
return <span style="font-family: Arial, Helvetica, sans-serif;">bos.toByteArray()</span><span style="font-family: Arial, Helvetica, sans-serif;">; </span>
}

尽快压缩后的数据不可视,但有心人非常easy通过拦截数据包非常快猜想到这是gzip压缩格式并给出解压程式,对于游戏领域、金融领域的应用,通讯过程的加密尤为重要。

Blowfish算法免费、速度快。不宜破解(关键是key数据不要泄露),在及时加密、解密中应用广泛。以下以Blowfish算法为例简单讲下数据的压缩、加密盒解密、解压过程。

1、定义keySpec。用来储存key数据的object:

static private SecretKeySpec keySpec;

byte[] key=KeyGenerator.getInstance("Blowfish").generateKey().getEncoded();

keySpec = new SecretKeySpec(key, "Blowfish");

2、再定义getCipher方法,依据mode获得加密/解密的Cipher Object:

	static private Cipher getCipher (int mode) {
try {
Cipher cipher = Cipher.getInstance("Blowfish");
cipher.init(mode, keySpec);
return cipher;
} catch (Exception ex) {
throw new KryoException(ex);
}
}

3、以下是对w_str的压缩、加密和解密、解压:

   public static void main(String[] args) throws IOException, NoSuchAlgorithmException{

   	keySpec = new SecretKeySpec(KeyGenerator.getInstance("Blowfish").generateKey().getEncoded(), "Blowfish");
String w_src="这是整數數組[1, -105, 104, 101, 108, 108, 111, 119, 111, 114, 108, 100, -17, -68, -116, -28, -72, -83, -26, -106, -121, -17, -68, -116, -25, -71, -127, -23, -85, -108, -17, -68, -116, -25, -80, -95, -23, -85, -108, -17, -68, -116, -25, -82, -128, -28, -67, -109]";
Cipher cipher = getCipher(Cipher.ENCRYPT_MODE);
ByteArrayOutputStream bos=new ByteArrayOutputStream();
GZIPOutputStream gos=new GZIPOutputStream(new CipherOutputStream(bos, cipher));
gos.write(w_src.getBytes());
gos.close();
bos.close();
byte[] data=bos.toByteArray();
//压缩加密后data仅仅有135byte长度,还是很可观的。 //decrypt & decompress
cipher = getCipher(Cipher.DECRYPT_MODE);
ByteArrayInputStream bis=new ByteArrayInputStream(data);
GZIPInputStream input = new GZIPInputStream(new CipherInputStream(bis,cipher));
ByteArrayOutputStream baos=new ByteArrayOutputStream();
byte[] w_buffer=new byte[2048];
int len=0;
while ((len=input.read(w_buffer))>0){
baos.write(w_buffer, 0, len);
}
bis.close();
input.close();
baos.close();
byte[] w_ret=baos.toByteArray();
String w_out_str=new String(w_ret);
System.out.println(w_out_str);
}

当然,对于极度重要的数据。为了安全起见,权衡加解密速度、破解难度等方面。个人建议还是用AES不正确称加密。

转载请注明出处:http://blog.csdn.net/rocklee

Java的压缩、解压及压缩加密、解密解压 样例的更多相关文章

  1. 对称加密之AES、压缩解压以及压缩加密解密解压综合实战

    AES 压缩解压 压缩加密解密解压 对称加密: 就是采用这种加密方法的双方使用方式用同样的密钥进行加密和解密.密钥是控制加密及解密过程的指令.算法是一组规则,规定如何进行加密和解密.   因此加密的安 ...

  2. java加密算法入门(三)-非对称加密详解

    1.简单介绍 这几天一直在看非对称的加密,相比之前的两篇内容,这次看了两倍多的时间还云里雾里的,所以这篇文章相对之前的两篇,概念性的东西多了些,另外是代码的每一步我都做了介绍,方便自己以后翻阅,也方便 ...

  3. java加密算法入门(二)-对称加密详解

    1.简单介绍 什么是对称加密算法? 对称加密算法即,加密和解密使用相同密钥的算法. 优缺点: 优点:算法公开.计算量小.加密速度快.加密效率高. 缺点: (1)交易双方都使用同样钥匙,安全性得不到保证 ...

  4. Java读取Excel文件(包括xls和xlsx)的样例程序

    样例程序如下所示,其中: parseXls()函数依赖于jxl,只能读取xls格式文件: parseExcel()函数依赖于apache poi,能够读取xls和xlsx两种格式的文件. jxl的依赖 ...

  5. java 颁发公钥 私钥 php js RSA 加密解密整合

    PHP rsa密钥生成 加密解密 - PHP开发 - CSDN博客 https://blog.csdn.net/duzhenxun/article/details/8879227 <?php c ...

  6. Swift - 自动布局库SnapKit的使用详解1(配置、使用方法、样例)

    为了适应各种屏幕尺寸,iOS 6后引入了自动布局(Auto Layout)的概念,通过使用各种 Constraint(约束)来实现页面自适应弹性布局. 在 StoryBoard 中使用约束实现自动布局 ...

  7. C# Java间进行RSA加密解密交互

    原文:C# Java间进行RSA加密解密交互 这里,讲一下RSA算法加解密在C#和Java之间交互的问题,这两天纠结了很久,也看了很多其他人写的文章,颇受裨益,但没能解决我的实际问题,终于,还是被我捣 ...

  8. Java中3DES加密解密与其他语言(如C/C++)通信

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  9. Java实现一个简单的加密解密方法

    Crypto是Java语言写的一个简单的加密解密方法. 使用方法: 加密方法 String cipherte=Enande.encrypt(content, pass): 解密方法 Enande.de ...

  10. 关于Java中常用加密/解密方法的实现

    安全问题已经成为一个越来越重要的问题,在Java中如何对重要数据进行加密解密是本文的主要内容. 一.常用的加密/解密算法 1.Base64 严格来说Base64并不是一种加密/解密算法,而是一种编码方 ...

随机推荐

  1. yum---rpm软件包管理器

    yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性 ...

  2. UVALive 5292 Critical Links

    Critical Links Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Ori ...

  3. 洛谷 P1709 [USACO5.5]隐藏口令Hidden Password

    P1709 [USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<= ...

  4. Myeclipse集成Maven(图文说明)

    myeclipse 上安装 Maven3 环境准备: JDK 1.6 Maven 3.2.5 myeclipse 2013 安装 Maven 之前要求先确定你的 JDK 已经安装配置完毕.Maven是 ...

  5. Android 阅读器架构图,网上收集,留做存货

    这个结构图是网上收集的图片.基结构明晰简洁.易于后期维护.本文会继续收集很多其他其他优秀的结构图,望有图的朋友推荐~

  6. jquery--new返回值

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. 47.__if_not_exists语句

    #include <iostream> using namespace std; template<class T> class myclass { public: T t; ...

  8. HDU 1548 A strange lift(最短路&&bfs)

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  9. 斜率优化dp练习

    1.HDU3507 裸题,有助于理解斜率优化的精髓. dp[i]=min(dp[j]+m+(sum[i]-sum[j])2) 很显然不是单调队列. 根据斜率优化的的定义,就是先设两个决策j,k 什么时 ...

  10. 基于mybatis的BaseDao及BaseService深度结合(转)

    原文地址:http://zhaoshijie.iteye.com/blog/2003209 关键字:Mybatis通用DAO设计封装(mybatis) 说明: mybatis默认分页机制为逻辑分页,所 ...