Aes加/解密工具类 --Java
文章目录
- 一、加/解密流程图
- 二、生成密钥
- 三、字符串加密解密
- 1.字符串加密
- 2.字符串解密
- 四、文件加密解密
- 1.文件加密
- 2.文件解密
- 五、测试
一、加/解密流程图
二、生成密钥
代码如下(示例):
/*** 生成加密密钥* @param seed 密钥种子+salt盐值* @param keySize key size* @return 密钥* @throws Exception 异常*/public static String generateKey(String seed, int keySize) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");SecureRandom secureRandom;if (seed != null && !"".equals(seed)) {secureRandom = new SecureRandom(seed.getBytes());} else {secureRandom = new SecureRandom();}keyGenerator.init(keySize, secureRandom);SecretKey secretKey = keyGenerator.generateKey();return Base64.encodeBase64String(secretKey.getEncoded());}
三、字符串加密解密
1.字符串加密
代码如下(示例):
/*** 字符串加密** @param data 需要加密的字符串* @param key 密钥* @return 结果* @throws Exception 异常*/public static String encrypt(String data, String key) throws Exception {Key k = toKey(Base64.decodeBase64(key));byte[] raw = k.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(1, secretKeySpec);byte[] encypted = cipher.doFinal(data.getBytes());return Base64.encodeBase64String(encypted);}
2.字符串解密
代码如下(示例):
/*** 字符串解密** @param data 已加密的字符串* @param key 密钥* @return 结果* @throws Exception 异常*/public static String decrypt(String data, String key) throws Exception {Key k = toKey(Base64.decodeBase64(key));byte[] raw = k.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(2, secretKeySpec);byte[] encryptedBytes = Base64.decodeBase64(data);byte[] originalBytes = cipher.doFinal(encryptedBytes);return new String(originalBytes);}
四、文件加密解密
1.文件加密
代码如下(示例):
/*** 文件加密* @param key 密钥* @param sourceFile 源文件* @param targetFile 目标文件* @return 结果* @throws Exception 异常*/public static int encryptFile(String key, File sourceFile, File targetFile) throws Exception {if (sourceFile.exists() && sourceFile.isFile()) {if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}targetFile.createNewFile();InputStream in = new FileInputStream(sourceFile);OutputStream out = new FileOutputStream(targetFile);Key k = toKey(Base64.decodeBase64(key));byte[] raw = k.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(1, secretKeySpec);CipherInputStream cin = new CipherInputStream(in, cipher);byte[] cache = new byte[1024];boolean var11 = false;int nRead;while ((nRead = cin.read(cache)) != -1) {out.write(cache, 0, nRead);out.flush();}out.close();cin.close();in.close();log.debug("Encrypted successfully!!");return 1;} else {log.debug("Encrypted Failed," + sourceFile.getAbsolutePath() + "文件不存在!!");return 1;}}
2.文件解密
代码如下(示例):
/*** 文件解密* @param key 密钥* @param sourceFile 源文件* @param targetFile 目标文件* @return 结果* @throws Exception 异常*/public static int decryptFile(String key, File sourceFile, File targetFile) throws Exception {if (sourceFile.exists() && sourceFile.isFile()) {if (!targetFile.getParentFile().exists()) {targetFile.getParentFile().mkdirs();}targetFile.createNewFile();FileInputStream in = new FileInputStream(sourceFile);FileOutputStream out = new FileOutputStream(targetFile);Key k = toKey(Base64.decodeBase64(key));byte[] raw = k.getEncoded();SecretKeySpec secretKeySpec = new SecretKeySpec(raw, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(2, secretKeySpec);CipherOutputStream cout = new CipherOutputStream(out, cipher);byte[] cache = new byte[1024];boolean var11 = false;int nRead;while ((nRead = in.read(cache)) != -1) {cout.write(cache, 0, nRead);cout.flush();}cout.close();out.close();in.close();log.debug("Decrypted successfully!!");return 0;} else {log.debug("Decrypted Failed," + sourceFile.getAbsolutePath() + "文件不存在!!");return 1;}}
五、测试
代码如下(示例):
public static void main(String[] args) {//密钥种子String seed = "123456";//salt盐值String salt = "tomy";//key sizeint keySize = 128;//secret keyString key = "";try {//生成secret keykey = GenerateKeyUtil.generateKey(seed + salt, keySize);System.out.println(key);//执行字符串加密String encrypt = AESUtil.encrypt("7895455", key);System.out.println(encrypt);//执行字符串解密String decrypt = AESUtil.decrypt(encrypt, key);System.out.println(decrypt);File sourceFile = new File("C:\\Users\\Desktop\\1.png");File targetFile = new File("C:\\Users\\Desktop\\2.png");File targetFile1 = new File("C:\\Users\\Desktop\\3.png");//执行文件加密encryptFile(key, sourceFile, targetFile);//执行文件解密decryptFile(key, targetFile, targetFile1);} catch (Exception e) {e.printStackTrace();}}
Aes加/解密工具类 --Java相关推荐
- java aes 工具类_Java中的AES加解密工具类:AESUtils
本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...
- Java各种方式加解密工具类
文章目录 前言 1.AES 2.DES 3.BCrypt 4.Http Basic 5.MD5 6.RSA 7.SHA256 8.SM3 9.SM4 前言 JAVA能够实现各种加解密方式,这里对各种加 ...
- rsa java ao_RSA加解密工具类
Java 实现 import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairG ...
- Java AES 加密解密工具类
maven 引入一个依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --> <depen ...
- 阿里云专属KMS信封加解密工具类
此工具类主要实现,字符串的加密,输出为Base64编码的字符串.字符串的解密,输入为Base64编码的字符串.工具类里的IV向量参数,需要用户自己保存,工具类中是默认写死在代码中的,并不规范.IV向量 ...
- RSA加解密工具类(PKCS8公钥加密,PKCS1私钥解密)
场景:如果项目上生成的秘钥,公钥是PKCS8格式,私钥却是PKCS1格式.需要在这种场景加解密的话可以直接使用下面工具类. 依赖 <dependency><groupId>or ...
- 国密算法-SM4加解密工具类
import cn.hutool.crypto.symmetric.SymmetricCrypto;/*** @author : chenfan* @className : SM4Utils* @da ...
- java aes 工具类_AESUtil Java AES 加密解密工具类
package com.singlee.util; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; impo ...
- Java中的RSA加解密工具类:RSAUtils
本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt;import com.mirana.frame.utils.log.LogUtils; ...
最新文章
- 设计模式(4)-序列生成器之单例模式
- 使用nodejs开发一个markdown文档管理小系统(一)Using Nodejs to quickly develop a markdown management system...
- QByteArray怎么转化为QString类型,并且在QLineEdit上面显示出来
- git merge --squash改写提交
- kali 安装搜狗输入法
- build-helper-maven-plugin 配置多 source resource 文件
- 机器学习实战--决策树算法
- 2019山科计算机专业分数线,2019山东科技大学研究生分数线汇总(含2016-2019历年复试)...
- Google Xpath Helper
- python-list列表排序问题 sort 与 sorted
- python3获取用户输入_python3.4控制用户输入与输出
- 亿图图示专家Edraw Max v10.5.2 中文免费版(附安装教程)
- 4*4矩阵式键盘识别技术c语言程序,4×4矩阵式键盘识别技术
- sqlParameter的使用------七个构造函数
- 【学习笔记】程序员学操作系统
- 普联(TP-LINK)的无线网卡在Linux下如何使用
- C语言课设——电影院选票系统
- 4、golang 发送电子邮件
- 电驴无限制 服务器,全球最大电驴服务器eDonkeyServer No2消失
- Python程序设计——基本语法