java物件序列化、gzip壓縮解壓縮、加密解密
有時在應用中需要將java物件序列化儲存起來,有的需要壓縮,有的需要加密
EncryptUtil.java
Java程式碼- package org.test.demo;
- import java.io.UnsupportedEncodingException;
- import java.security.InvalidKeyException;
- import java.security.NoSuchAlgorithmException;
- import java.security.SecureRandom;
-
import javax.crypto.BadPaddingException;
- import javax.crypto.Cipher;
- import javax.crypto.IllegalBlockSizeException;
- import javax.crypto.KeyGenerator;
- import javax.crypto.NoSuchPaddingException;
- import javax.crypto.SecretKey;
- import javax.crypto.spec.SecretKeySpec;
- public class EncryptUtil {
-
private final static String ENCRYPTKEY="0123456789"
- /**
- *
- * @Title: getEncryptKey
- * @Description: 檢驗加密key
- * @param encryptKey
- * @return
- * String
- *
- */
- private static String getEncryptKey(String encryptKey){
-
if(null==encryptKey || "".equals(encryptKey)) return ENCRYPTKEY;
- return encryptKey;
- }
- /**
- *
- * @Title: encrypt
- * @Description: 加密:普通java字串加密成16進位制字串(String -> Byte -> HexStr)
- * @param content 要加密處理的字串
- * @param encryptKey 加密金鑰
- * @return
- * String
- *
- */
- public static String encrypt(String content, String encryptKey){
- byte[] encryptResult = encryptStrToByte(content, getEncryptKey(encryptKey));
- return parseByte2HexStr(encryptResult);
- }
- /**
- *
- * @Title: decrypt
- * @Description: 加密:16進位制字串解密成普通java字串(HexStr -> Byte ->String)
- * @param content 要解密處理的16進位制字串
- * @param encryptKey 解密金鑰
- * @return
- * String
- *
- */
- public static String decrypt(String content, String encryptKey){
- byte[] decryptFrom = parseHexStr2Byte(content);
- byte[] decryptResult = decrypt(decryptFrom,getEncryptKey(encryptKey));
- return new String(decryptResult);
- }
- /**
- * 加密:字串 --> 二進位制
- * @param content 需要加密的內容
- * @param password 加密密碼
- * @return
- */
- private static byte[] encryptStrToByte(String content, String password) {
- try {
- KeyGenerator kgen = KeyGenerator.getInstance("AES");
- kgen.init(128, new SecureRandom(password.getBytes()));
- SecretKey secretKey = kgen.generateKey();
- byte[] enCodeFormat = secretKey.getEncoded();
- SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
- Cipher cipher = Cipher.getInstance("AES");// 建立密碼器
- byte[] byteContent = content.getBytes("utf-8");
- cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
- byte[] result = cipher.doFinal(byteContent);
- return result; // 加密
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- }
- return null;
- }
- /**解密
- * @param content 待解密內容
- * @param password 解密金鑰
- * @return
- */
- private static byte[] decrypt(byte[] content, String password) {
- try {
- KeyGenerator kgen = KeyGenerator.getInstance("AES");
- kgen.init(128, new SecureRandom(password.getBytes()));
- SecretKey secretKey = kgen.generateKey();
- byte[] enCodeFormat = secretKey.getEncoded();
- SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
- Cipher cipher = Cipher.getInstance("AES");// 建立密碼器
- cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
- byte[] result = cipher.doFinal(content);
- return result; // 加密
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchPaddingException e) {
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- e.printStackTrace();
- } catch (BadPaddingException e) {
- e.printStackTrace();
- }
- return null;
- }
- /**將二進位制轉換成16進位制
- * @param buf
- * @return
- */
- private static String parseByte2HexStr(byte buf[]) {
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < buf.length; i++) {
- String hex = Integer.toHexString(buf[i] & 0xFF);
- if (hex.length() == 1) {
- hex = '0' + hex;
- }
- sb.append(hex.toUpperCase());
- }
- return sb.toString();
- }
- /**
- * 將16進位制轉換為二進位制
- *
- * @param hexStr
- * @return
- */
- private static byte[] parseHexStr2Byte(String hexStr) {
- if (hexStr.length() < 1)
- return null;
- byte[] result = new byte[hexStr.length() / 2];
- for (int i = 0; i < hexStr.length() / 2; i++) {
- int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
- int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),
- 16);
- result[i] = (byte) (high * 16 + low);
- }
- return result;
- }
- }
GZipUtils.java
Java程式碼- package org.test.demo;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
-
相關推薦
java物件序列化、gzip壓縮解壓縮、加密解密
有時在應用中需要將java物件序列化儲存起來,有的需要壓縮,有的需要加密 EncryptUtil.java Java程式碼 package org.test.demo; import java.io.UnsupportedE
Java 物件序列化機制詳解
物件序列化的目標:將物件儲存到磁碟中,或允許在網路中直接傳輸物件。 物件序列化機制允許把記憶體中的Java物件轉換成平臺無關的二進位制流,從而允許把這種二進位制流持久的儲存在磁碟上,通過網路將這種二進位制流傳輸到另一個網路節點。其他程式一旦獲得了這種二進位制流,都可以講這種
tar、zip、gzip等解壓縮命令
解壓縮tar命令:壓縮:tar cf 壓縮後的文件名.tar.gz 壓縮前的文件或者目錄解壓:tar xf 壓縮後的文件名.tar.gz查看壓縮裏的內容:tar tf 壓縮後的文件名.tar.gz zip命令:壓縮目錄:zip –r /opt/etc.zip /etc 解壓:unzip /opt/etc.
java物件序列化機制
1.定義 java物件序列化機制允許實現了Serializable/Externalizable介面的java物件永久性地儲存到計算機的磁碟中,或則允許java物件直接在網路中傳輸,擺脫平臺的限制。反序列化即使將IO流中的位元組序列轉化為java物件。 2.原理 3.使用 序列化: 1)一個實現了S
java - 物件序列化
在java中可以將物件進行序列化操作 要使物件能夠被序列化,那麼被序列化的物件要實現介面Serializable,此介面位於java.io包中 pakacge demo; import java.io.Serializable; /** * 實現了Serializable 介面的
java物件序列化與複製圖片
下面程式碼包括賦值多個圖片,物件的序列化,目的是將物件狀態存入檔案,再把物件狀態從檔案中讀取。 DataInputStream dis; DataOutputStream dos; FileInputStream fi = null;
記一次使用Jackson對Java物件序列化和反序列化的踩坑經歷
背景大概是這樣,專案中的兩個服務A和B依賴了同一個common包的Java類,A對該類json序列化,而B對其反序列化。在一次common包升級過程中,這個Java類中增加了一個屬性,由於B其實用不到這個屬性,就只把A給升級打包了,這就導致B在反序列化時出現了一個異常:com.fasterxml.j
關於 Java 物件序列化您不知道的 5 件事
關於本系列 您覺得自己懂 Java 程式設計?事實上,大多數程式設計師對於 Java 平臺都是淺嘗則止,只學習了足以完成手頭上任務的知識而已。在本 系列 中,Ted Neward 深入挖掘 Java 平臺的核心功能,揭示一些鮮為人知的事實,幫助您解決最棘手的程式設計挑戰。 大約一年前,一個負責管理應用程式
Java物件序列化
什麼是物件序列化? 物件序列化是指將物件轉換為二進位制資料流的操作,從而使物件的狀態資訊轉換為可以儲存或傳輸的形式。通俗點,我覺得就是把物件的狀態轉換為一個字串(這個字串是亂碼的,誰也看不懂)。 為什麼要有物件序列化? 比如有一個建立一個物件: Book book=n
Java 物件序列化方法
舉個例子直接說明,下面是一個學生物件 import java.io.Serializable; import lombok.Data; import com.baomidou.mybatisplus.enums.IdType; import java.math.BigDecimal; i
Java 物件序列化和反序列化 (實現 Serializable 介面)
序列化和反序列化的概念 把物件轉換為位元組序列的過程稱為物件的序列化。 把位元組序列恢復為物件的過程稱為物件的反序列化。 物件的序列化主要有兩種用途: 把物件的位元組序列永久地儲存到硬碟上,通常存放在一個檔案中; 在網路上傳送物件的位元組序列。 JDK
Java 物件序列化與反序化 (json格式)
將 物件序列化與反序化 (json格式) 實體類 package com.nf.redisDemo1.entity; public class News { private long id; private String title; private S
Java深度歷險(十)——Java物件序列化與RMI
對於一個存在於Java虛擬機器中的物件來說,其內部的狀態只保持在記憶體中。JVM停止之後,這些狀態就丟失了。在很多情況下,物件的內部狀態是需要被持久化下來的。提到持久化,最直接的做法是儲存到檔案系統或是資料庫之中。這種做法一般涉及到自定義儲存格式以及繁瑣的資料轉換。物件關
java物件序列化並存儲到檔案和資料庫
Java中要實現將物件儲存起來持久化,需要讓物件實現Serializable介面,這樣就能將java物件用二進位制流儲存並恢復。下面我將以儲存到檔案和儲存到mysql來進行解析。先給出序列化類的定義:package model; import java.io.Seriali
Java物件序列化原理以及Serializable介面
Java物件的序列化就是把一個物件變成二進位制的資料流的一中方法,通過物件的序列化可以方便的實現物件的傳輸和儲存。 原理是:物件------------->轉換----------------->將物件轉變為二進位制的資料 在物件序列化時
理解Java物件序列化
1. 什麼是Java物件序列化 Java平臺允許我們在記憶體中建立可複用的Java物件,但一般情況下,只有當JVM處於執行時,這些物件才可能存在,即,這些物件的生命週期不會比JVM的生命週期更長。但在現實應用中,就可能要求在JVM停止執行之後能夠儲存(持久化)
java物件序列化的理解
JAVA RMI(Remote Method Invocation)遠端方法呼叫 在RMI 中物件和簡單的資料值可以作為方法呼叫的引數和結果傳遞。一個物件就是java類的例項。 java序列化: 將一個物件或一組有關的物件做成適合於磁碟儲存或訊息傳
理解Java物件序列化——Serializable介面
概述:當一個類實現了Serializable介面(該介面僅為標記介面,不包含任何方法定義),表示該類可以序列化.序列化的目的是將一個實現了Serializable介面的物件轉換成一個位元組序列,可以。 把該位元組序列儲存起來(例如:儲存在一個檔案裡),以後可以隨時將該位元組序列恢復為原來的物件。甚至可以將該位
java物件序列化技術
一、簡介 序列化用於儲存或傳輸物件的資訊。java的API提供了序列換技術,使用簡單,但往往空間佔用大。 Kryo是一個java物件的序列化框架。它的目標是序列化更快、序列化物件更小、簡單易用的API。Kryo可以將物件持久化到檔案、資料庫、或則用於網路傳輸。Kryo可以
【Java】將Java物件序列化/反序列化為JSON,並寫入redis
RedisUtil類和spring_config.xml配置檔案在這篇文章:【Redis】Spring整合Redis 中給出了,這裡不再贅述。① 依賴匯入 <!-- fastjson -->