欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java字符串壓縮解壓示例

 更新時間:2014年03月22日 14:29:11   作者:  
這篇文章主要介紹了java字符串壓縮解壓示例,先壓縮,再加密,再壓縮,數(shù)據(jù)越大,壓縮比例越高,需要的朋友可以參考下


我測試的字符串是JQuery源碼。

明文長度:78082
壓縮后:26566
加密長度:54746
再壓縮:41647
-----------------------------
密文長度:41647
解壓縮:54746
解密后:26566
再解壓:78082
-----------------------------
比對成功

Des需要Jar:sun.misc.BASE64Decoder.jar

Test

復(fù)制代碼 代碼如下:

public static void main(String[] args) throws Exception {
  String cont = "";
  String cont2=jm(yjy(cont));
  if(cont.equals(cont2)){
   System.out.println("比對成功");
  }else{
   System.out.println("比對失敗");
  }
 }

 public static String yjy(String cont) throws Exception {
  System.out.println("明文長度:" + cont.length());
  // 第一次壓縮
  cont = ZipUtil2.compress(cont);
  System.out.println("壓縮后:" + cont.length());
  // 第一次加密
  cont = DesUtil.encrypt(cont, DesUtil.PWD_KEY);
  System.out.println("加密長度:" + cont.length());
  // 第二次壓縮
  cont = ZipUtil2.compress(cont);
  System.out.println("再壓縮:" + cont.length());
  return cont;
 }

 public static String jm(String cont) throws Exception {
  System.out.println("-----------------------------");
  System.out.println("密文長度:" + cont.length());

  // 第一次解壓縮
  cont = ZipUtil2.uncompress(cont);
  System.out.println("解壓縮:" + cont.length());

  // 第一次解密
  cont = DesUtil.decrypt(cont, DesUtil.PWD_KEY);
  System.out.println("解密后:" + cont.length());

  // 第二次解壓縮
  cont = ZipUtil2.uncompress(cont);
  System.out.println("再解壓:" + cont.length());

  return cont;
 }

DesUtil

復(fù)制代碼 代碼如下:

import java.io.IOException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;

import Decoder.BASE64Decoder;
import Decoder.BASE64Encoder;

public class DesUtil {

 private final static String DES = "DES";
 public final static String PWD_KEY = "MZTHPWDJM";
 public final static String ID_KEY = "MZTHIDJM";

 public static void main(String[] args) throws Exception {
  String data = "xkajsdasdk'al;ks'dl;kasl;d";
  System.err.println("加密:"+encrypt(data, PWD_KEY));
  System.err.println("解密:" +decrypt(encrypt(data, PWD_KEY), PWD_KEY));
 }

 /**
  * Description 根據(jù)鍵值進行加密
  *
  * @param data
  * @param key
  *            加密鍵byte數(shù)組
  * @return
  * @throws Exception
  */
 public static String encrypt(String data, String key) throws Exception {
  byte[] bt = encrypt(data.getBytes(), key.getBytes());
  String strs = new BASE64Encoder().encode(bt);
  return strs;
 }

 /**
  * Description 根據(jù)鍵值進行解密
  *
  * @param data
  * @param key
  *            加密鍵byte數(shù)組
  * @return
  * @throws IOException
  * @throws Exception
  */
 public static String decrypt(String data, String key) throws IOException,
   Exception {
  if (data == null)
   return null;
  BASE64Decoder decoder = new BASE64Decoder();
  byte[] buf = decoder.decodeBuffer(data);
  byte[] bt = decrypt(buf, key.getBytes());
  return new String(bt);
 }

 /**
  * Description 根據(jù)鍵值進行加密
  *
  * @param data
  * @param key
  *            加密鍵byte數(shù)組
  * @return
  * @throws Exception
  */
 private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
  // 生成一個可信任的隨機數(shù)源
  SecureRandom sr = new SecureRandom();

  // 從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對象
  DESKeySpec dks = new DESKeySpec(key);

  // 創(chuàng)建一個密鑰工廠,然后用它把DESKeySpec轉(zhuǎn)換成SecretKey對象
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
  SecretKey securekey = keyFactory.generateSecret(dks);

  // Cipher對象實際完成加密操作
  Cipher cipher = Cipher.getInstance(DES);

  // 用密鑰初始化Cipher對象
  cipher.init(Cipher.ENCRYPT_MODE, securekey, sr);

  return cipher.doFinal(data);
 }

 /**
  * Description 根據(jù)鍵值進行解密
  *
  * @param data
  * @param key
  *            加密鍵byte數(shù)組
  * @return
  * @throws Exception
  */
 private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
  // 生成一個可信任的隨機數(shù)源
  SecureRandom sr = new SecureRandom();

  // 從原始密鑰數(shù)據(jù)創(chuàng)建DESKeySpec對象
  DESKeySpec dks = new DESKeySpec(key);

  // 創(chuàng)建一個密鑰工廠,然后用它把DESKeySpec轉(zhuǎn)換成SecretKey對象
  SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(DES);
  SecretKey securekey = keyFactory.generateSecret(dks);

  // Cipher對象實際完成解密操作
  Cipher cipher = Cipher.getInstance(DES);

  // 用密鑰初始化Cipher對象
  cipher.init(Cipher.DECRYPT_MODE, securekey, sr);

  return cipher.doFinal(data);
 }
}

ZipUtil2
.

復(fù)制代碼 代碼如下:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

// 將一個字符串按照zip方式壓縮和解壓縮  
public class ZipUtil2 {

 // 測試方法
 public static void main(String[] args) throws IOException {

  // 測試字符串
  String str = "";
  System.out.println("原長度:" + str.length());
  System.out.println("壓縮后:" + ZipUtil2.compress(str).length());
  System.out
    .println("解壓縮:" + ZipUtil2.uncompress(ZipUtil2.compress(str)));
 }

 // 壓縮
 public static String compress(String str) throws IOException {
  if (str == null || str.length() == 0) {
   return str;
  }
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  GZIPOutputStream gzip = new GZIPOutputStream(out);
  gzip.write(str.getBytes());
  gzip.close();
  return out.toString("ISO-8859-1");
 }

 // 解壓縮
 public static String uncompress(String str) throws IOException {
  if (str == null || str.length() == 0) {
   return str;
  }
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  ByteArrayInputStream in = new ByteArrayInputStream(
    str.getBytes("ISO-8859-1"));
  GZIPInputStream gunzip = new GZIPInputStream(in);
  byte[] buffer = new byte[256];
  int n;
  while ((n = gunzip.read(buffer)) >= 0) {
   out.write(buffer, 0, n);
  }
  // toString()使用平臺默認編碼,也可以顯式的指定如toString("GBK")
  return out.toString();
 }

}

相關(guān)文章

  • 劍指Offer之Java算法習(xí)題精講字符串操作與數(shù)組及二叉搜索樹

    劍指Offer之Java算法習(xí)題精講字符串操作與數(shù)組及二叉搜索樹

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • IDE Eval Reset忘了重置進不去的完美解決方法

    IDE Eval Reset忘了重置進不去的完美解決方法

    這篇文章主要介紹了IDE Eval Reset忘了重置進不去的完美解決方法,插件安裝方式包括離線安裝和在線安裝方式,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • Java實現(xiàn)一個簡單計算器

    Java實現(xiàn)一個簡單計算器

    這篇文章主要介紹了Java實現(xiàn)一個簡單計算器,文章我圍繞實現(xiàn)簡單計算器的相關(guān)代碼展現(xiàn)全文,具有一定的參考價值,需要的小伙伴可以參考一下,
    2022-01-01
  • Java中 log4j日志級別配置詳解

    Java中 log4j日志級別配置詳解

    這篇文章主要介紹了Java中 log4j日志級別配置詳解,需要的朋友可以參考下
    2018-01-01
  • MyBatis屬性名和字段名不一致的問題解決方法

    MyBatis屬性名和字段名不一致的問題解決方法

    這篇文章給大家詳細介紹了MyBatis屬性名和字段名不一致的問題解決,文中有詳細的代碼示例和圖文展示供大家參考,對大家的學(xué)習(xí)或工作有一定的參考價值,需要的朋友可以參考下
    2023-12-12
  • java swing框架實現(xiàn)貪吃蛇游戲

    java swing框架實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了java swing框架實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Fastjson 常用API介紹及下載地址(推薦)

    Fastjson 常用API介紹及下載地址(推薦)

    Fastjson是一個Java語言編寫的高性能功能完善的JSON庫。接下來通過本文給大家分享Fastjson 常用API介紹及下載地址,感興趣的朋友一起看看吧
    2017-11-11
  • SpringBoot封裝自己的Starter的實現(xiàn)方法

    SpringBoot封裝自己的Starter的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot封裝自己的Starter的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 使用工具類-java精確到小數(shù)點后6位

    使用工具類-java精確到小數(shù)點后6位

    這篇文章主要介紹了使用工具類-java精確到小數(shù)點后6位,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Spring Boot Admin微服務(wù)應(yīng)用監(jiān)控的實現(xiàn)

    Spring Boot Admin微服務(wù)應(yīng)用監(jiān)控的實現(xiàn)

    這篇文章主要介紹了Spring Boot Admin微服務(wù)應(yīng)用監(jiān)控,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評論