文章目录

  • 一、加/解密流程图
  • 二、生成密钥
  • 三、字符串加密解密
    • 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相关推荐

  1. java aes 工具类_Java中的AES加解密工具类:AESUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt; import com.mirana.frame.constants.SysConsta ...

  2. Java各种方式加解密工具类

    文章目录 前言 1.AES 2.DES 3.BCrypt 4.Http Basic 5.MD5 6.RSA 7.SHA256 8.SM3 9.SM4 前言 JAVA能够实现各种加解密方式,这里对各种加 ...

  3. rsa java ao_RSA加解密工具类

    Java 实现 import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairG ...

  4. Java AES 加密解密工具类

    maven 引入一个依赖 <!-- https://mvnrepository.com/artifact/commons-codec/commons-codec --> <depen ...

  5. 阿里云专属KMS信封加解密工具类

    此工具类主要实现,字符串的加密,输出为Base64编码的字符串.字符串的解密,输入为Base64编码的字符串.工具类里的IV向量参数,需要用户自己保存,工具类中是默认写死在代码中的,并不规范.IV向量 ...

  6. RSA加解密工具类(PKCS8公钥加密,PKCS1私钥解密)

    场景:如果项目上生成的秘钥,公钥是PKCS8格式,私钥却是PKCS1格式.需要在这种场景加解密的话可以直接使用下面工具类. 依赖 <dependency><groupId>or ...

  7. 国密算法-SM4加解密工具类

    import cn.hutool.crypto.symmetric.SymmetricCrypto;/*** @author : chenfan* @className : SM4Utils* @da ...

  8. java aes 工具类_AESUtil Java AES 加密解密工具类

    package com.singlee.util; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; impo ...

  9. Java中的RSA加解密工具类:RSAUtils

    本人手写已测试,大家可以参考使用 package com.mirana.frame.utils.encrypt;import com.mirana.frame.utils.log.LogUtils; ...

最新文章

  1. 设计模式(4)-序列生成器之单例模式
  2. 使用nodejs开发一个markdown文档管理小系统(一)Using Nodejs to quickly develop a markdown management system...
  3. QByteArray怎么转化为QString类型,并且在QLineEdit上面显示出来
  4. git merge --squash改写提交
  5. kali 安装搜狗输入法
  6. build-helper-maven-plugin 配置多 source resource 文件
  7. 机器学习实战--决策树算法
  8. 2019山科计算机专业分数线,2019山东科技大学研究生分数线汇总(含2016-2019历年复试)...
  9. Google Xpath Helper
  10. python-list列表排序问题 sort 与 sorted
  11. python3获取用户输入_python3.4控制用户输入与输出
  12. 亿图图示专家Edraw Max v10.5.2 中文免费版(附安装教程)
  13. 4*4矩阵式键盘识别技术c语言程序,4×4矩阵式键盘识别技术
  14. sqlParameter的使用------七个构造函数
  15. 【学习笔记】程序员学操作系统
  16. 普联(TP-LINK)的无线网卡在Linux下如何使用
  17. C语言课设——电影院选票系统
  18. 4、golang 发送电子邮件
  19. 电驴无限制 服务器,全球最大电驴服务器eDonkeyServer No2消失
  20. Python程序设计——基本语法

热门文章

  1. iShowU Studio—高清录屏工具
  2. vue+cesium cesium数据量太大导致浏览器卡顿解决办法
  3. 网络分层模型TCP/IP
  4. web版svg制作工具
  5. 爱奇艺:基于龙蜥与 Koordinator 在离线混部的实践解析
  6. 监控线上服务器运行情况脚本
  7. python中计算BLEU分数
  8. 学计算机应用数学成绩必须好吗,美国计算机应用数学硕士申请简析
  9. php移动字符串,php操作字符串函数
  10. Win11的两个实用技巧系列之蓝牙无法连接、错误代码0x80070483怎么办?