日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java aes 解密 文件_Java AES文件加解密

發布時間:2023/12/3 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java aes 解密 文件_Java AES文件加解密 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://www.webtag123.com/java/4049.html

AESUtils.java

package demo.security;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.security.Key;

import java.security.SecureRandom;

import javax.crypto.Cipher;

import javax.crypto.CipherInputStream;

import javax.crypto.CipherOutputStream;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

/**

*

* AES加密解密工具包

*

*

* @author IceWee

* @date 2012-5-18

* @version 1.0

*/

public class AESUtils {

private static final String ALGORITHM = "AES";

private static final int KEY_SIZE = 128;

private static final int CACHE_SIZE = 1024;

/**

*

* 生成隨機密鑰

*

*

* @return

* @throws Exception

*/

public static String getSecretKey() throws Exception {

return getSecretKey(null);

}

/**

*

* 生成密鑰

*

*

* @param seed 密鑰種子

* @return

* @throws Exception

*/

public static String getSecretKey(String seed) throws Exception {

KeyGenerator keyGenerator = KeyGenerator.getInstance(ALGORITHM);

SecureRandom secureRandom;

if (seed != null && !"".equals(seed)) {

secureRandom = new SecureRandom(seed.getBytes());

} else {

secureRandom = new SecureRandom();

}

keyGenerator.init(KEY_SIZE, secureRandom);

SecretKey secretKey = keyGenerator.generateKey();

return Base64Utils.encode(secretKey.getEncoded());

}

/**

*

* 加密

*

*

* @param data

* @param key

* @return

* @throws Exception

*/

public static byte[] encrypt(byte[] data, String key) throws Exception {

Key k = toKey(Base64Utils.decode(key));

byte[] raw = k.getEncoded();

SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);

Cipher cipher = Cipher.getInstance(ALGORITHM);

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

return cipher.doFinal(data);

}

/**

*

* 文件加密

*

*

* @param key

* @param sourceFilePath

* @param destFilePath

* @throws Exception

*/

public static void encryptFile(String key, String sourceFilePath, String destFilePath) throws Exception {

File sourceFile = new File(sourceFilePath);

File destFile = new File(destFilePath);

if (sourceFile.exists() && sourceFile.isFile()) {

if (!destFile.getParentFile().exists()) {

destFile.getParentFile().mkdirs();

}

destFile.createNewFile();

InputStream in = new FileInputStream(sourceFile);

OutputStream out = new FileOutputStream(destFile);

Key k = toKey(Base64Utils.decode(key));

byte[] raw = k.getEncoded();

SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);

Cipher cipher = Cipher.getInstance(ALGORITHM);

cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

CipherInputStream cin = new CipherInputStream(in, cipher);

byte[] cache = new byte[CACHE_SIZE];

int nRead = 0;

while ((nRead = cin.read(cache)) != -1) {

out.write(cache, 0, nRead);

out.flush();

}

out.close();

cin.close();

in.close();

}

}

/**

*

* 解密

*

*

* @param data

* @param key

* @return

* @throws Exception

*/

public static byte[] decrypt(byte[] data, String key) throws Exception {

Key k = toKey(Base64Utils.decode(key));

byte[] raw = k.getEncoded();

SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);

Cipher cipher = Cipher.getInstance(ALGORITHM);

cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

return cipher.doFinal(data);

}

/**

*

* 文件解密

*

*

* @param key

* @param sourceFilePath

* @param destFilePath

* @throws Exception

*/

public static void decryptFile(String key, String sourceFilePath, String destFilePath) throws Exception {

File sourceFile = new File(sourceFilePath);

File destFile = new File(destFilePath);

if (sourceFile.exists() && sourceFile.isFile()) {

if (!destFile.getParentFile().exists()) {

destFile.getParentFile().mkdirs();

}

destFile.createNewFile();

FileInputStream in = new FileInputStream(sourceFile);

FileOutputStream out = new FileOutputStream(destFile);

Key k = toKey(Base64Utils.decode(key));

byte[] raw = k.getEncoded();

SecretKeySpec secretKeySpec = new SecretKeySpec(raw, ALGORITHM);

Cipher cipher = Cipher.getInstance(ALGORITHM);

cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

CipherOutputStream cout = new CipherOutputStream(out, cipher);

byte[] cache = new byte[CACHE_SIZE];

int nRead = 0;

while ((nRead = in.read(cache)) != -1) {

cout.write(cache, 0, nRead);

cout.flush();

}

cout.close();

out.close();

in.close();

}

}

/**

*

* 轉換密鑰

*

*

* @param key

* @return

* @throws Exception

*/

private static Key toKey(byte[] key) throws Exception {

SecretKey secretKey = new SecretKeySpec(key, ALGORITHM);

return secretKey;

}

}

Base64Utils.java(依賴javabase64-1.3.1.jar)

package demo.security;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import it.sauronsoftware.base64.Base64;

/**

*

* BASE64編碼解碼工具包

*

*

* 依賴javabase64-1.3.1.jar

*

*

* @author IceWee

* @date 2012-5-19

* @version 1.0

*/

public class Base64Utils {

/**

* 文件讀取緩沖區大小

*/

private static final int CACHE_SIZE = 1024;

/**

*

* BASE64字符串解碼為二進制數據

*

*

* @param base64

* @return

* @throws Exception

*/

public static byte[] decode(String base64) throws Exception {

return Base64.decode(base64.getBytes());

}

/**

*

* 二進制數據編碼為BASE64字符串

*

*

* @param bytes

* @return

* @throws Exception

*/

public static String encode(byte[] bytes) throws Exception {

return new String(Base64.encode(bytes));

}

/**

*

* 將文件編碼為BASE64字符串

*

*

* 大文件慎用,可能會導致內存溢出

*

*

* @param filePath 文件絕對路徑

* @return

* @throws Exception

*/

public static String encodeFile(String filePath) throws Exception {

byte[] bytes = fileToByte(filePath);

return encode(bytes);

}

/**

*

* BASE64字符串轉回文件

*

*

* @param filePath 文件絕對路徑

* @param base64 編碼字符串

* @throws Exception

*/

public static void decodeToFile(String filePath, String base64) throws Exception {

byte[] bytes = decode(base64);

byteArrayToFile(bytes, filePath);

}

/**

*

* 文件轉換為二進制數組

*

*

* @param filePath 文件路徑

* @return

* @throws Exception

*/

public static byte[] fileToByte(String filePath) throws Exception {

byte[] data = new byte[0];

File file = new File(filePath);

if (file.exists()) {

FileInputStream in = new FileInputStream(file);

ByteArrayOutputStream out = new ByteArrayOutputStream(2048);

byte[] cache = new byte[CACHE_SIZE];

int nRead = 0;

while ((nRead = in.read(cache)) != -1) {

out.write(cache, 0, nRead);

out.flush();

}

out.close();

in.close();

data = out.toByteArray();

}

return data;

}

/**

*

* 二進制數據寫文件

*

*

* @param bytes 二進制數據

* @param filePath 文件生成目錄

*/

public static void byteArrayToFile(byte[] bytes, String filePath) throws Exception {

InputStream in = new ByteArrayInputStream(bytes);

File destFile = new File(filePath);

if (!destFile.getParentFile().exists()) {

destFile.getParentFile().mkdirs();

}

destFile.createNewFile();

OutputStream out = new FileOutputStream(destFile);

byte[] cache = new byte[CACHE_SIZE];

int nRead = 0;

while ((nRead = in.read(cache)) != -1) {

out.write(cache, 0, nRead);

out.flush();

}

out.close();

in.close();

}

}

AESTester.java

package demo.security;

public class AESTester {

static String key;

static {

try {

key = AESUtils.getSecretKey();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) throws Exception {

long begin = System.currentTimeMillis();

encryptFile();

decryptFile();

test();

long end = System.currentTimeMillis();

System.err.println("耗時:" + (end-begin)/1000 + "秒");

}

static void encryptFile() throws Exception {

String sourceFilePath = "D:/demo.mp4";

String destFilePath = "D:/demo_encrypted.mp4";

AESUtils.encryptFile(key, sourceFilePath, destFilePath);

}

static void decryptFile() throws Exception {

String sourceFilePath = "D:/demo_encrypted.mp4";

String destFilePath = "D:/demo_decrypted.mp4";

AESUtils.decryptFile(key, sourceFilePath, destFilePath);

}

static void test() throws Exception {

String source = "這是一行測試DES加密/解密的文字,你看完也等于沒看,是不是啊?!";

System.err.println("原文:\t" + source);

byte[] inputData = source.getBytes();

inputData = AESUtils.encrypt(inputData, key);

System.err.println("加密后:\t" + Base64Utils.encode(inputData));

byte[] outputData = AESUtils.decrypt(inputData, key);

String outputStr = new String(outputData);

System.err.println("解密后:\t" + outputStr);

}

}

總結

以上是生活随笔為你收集整理的java aes 解密 文件_Java AES文件加解密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。