使用JDK8引入的 java.util.Base64 负责base64转码
Base64Tools 工具类,AES加密要用到它,负责 byte 数组的base64编码,base64 编码的目的是消除乱码

import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class Base64Tools {private final static Base64.Decoder decoder = Base64.getDecoder();private final static Base64.Encoder encoder = Base64.getEncoder();public static byte[] encode(byte[] content) throws UnsupportedEncodingException {return encoder.encode(content);}public static byte[] decode(byte[] content) throws UnsupportedEncodingException {return decoder.decode(content);}
}

AESTools 工具类,负责对 byte 数组加密和解密

import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;public class AESTools {private static final Base64.Decoder decoder = Base64.getDecoder();private static final Base64.Encoder encoder = Base64.getEncoder();public static byte[] AESEncode(String password, byte[] content) {try {KeyGenerator keygen = KeyGenerator.getInstance("AES");SecureRandom random = SecureRandom.getInstance("SHA1PRNG");random.setSeed(password.getBytes());keygen.init(128, random);SecretKey originalKey = keygen.generateKey();SecretKey key = new SecretKeySpec(originalKey.getEncoded(), "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, key);return Base64Tools.encode(cipher.doFinal(content)); // 加密后用base64编码} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();}return null;}public static byte[] AESDecode(String password, byte[] content) {try {KeyGenerator keygen = KeyGenerator.getInstance("AES");SecureRandom random = SecureRandom.getInstance("SHA1PRNG");random.setSeed(password.getBytes());keygen.init(128, random);SecretKey originalKey = keygen.generateKey();SecretKey key = new SecretKeySpec(originalKey.getEncoded(), "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, key);return cipher.doFinal(Base64Tools.decode(content));} catch (NoSuchAlgorithmException e) {e.printStackTrace();} catch (InvalidKeyException e) {e.printStackTrace();} catch (NoSuchPaddingException e) {e.printStackTrace();} catch (BadPaddingException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IllegalBlockSizeException e) {e.printStackTrace();}return null;}}

测试用例我从网上找了一段文字,将它加密后再解密,和原文进行对比

public class Main {public static void main(String[] args) throws Exception {String password = "passwordwhateveryouwant";String content = "We hold these truths to be self-evident, that all men are created equal\n我们认为下述真理是不言而喻的:人人生而平等";System.out.println(content);String encryptedString = new String(AESTools.AESEncode(password, content.getBytes()));System.out.println(encryptedString);String decryptedString = new String(AESTools.AESDecode(password, encryptedString.getBytes()));System.out.println(decryptedString);if (content.equals(decryptedString)) System.out.printf("原文和加密后再解密的结果相等");else System.out.printf("原文和加密后再解密的结果不相等");}
}

运行结果

java AES加密相关推荐

  1. java AES 加密和linux解密

    java AES 加密: package app;import static java.nio.charset.StandardCharsets.US_ASCII; import static jav ...

  2. Java AES 加密解密工具类

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

  3. java AES加密解密

    近些年DES使用越来越少,原因就在于其使用56位密钥,比较容易被破解,近些年来逐渐被AES替代,AES已经变成目前对称加密中最流行算法之一:AES可以使用128.192.和256位密钥,并且用128位 ...

  4. Java AES加密工具类

    import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import jav ...

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

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

  6. java AES加密 前端CryptoJS AES解密

    问题 java加密生成base64位字符串,前端使用Java提供的密钥,前端无法解密出数据. java后台加密使用AES/ECB/PKCS5Padding 数据准备: 一个固定秘钥,互相约定 B7E1 ...

  7. java aes加密 base64_【java】AES加密解密|及Base64的使用

    AES加解密算法,使用Base64做转码以及辅助加密: package com.wintv.common; import javax.crypto.Cipher; import javax.crypt ...

  8. Java AES加密,兼容Linux和Windows

    项目背景: 需要对下载链接的关键数据进行加密,解码: import java.io.UnsupportedEncodingException; import java.security.Invalid ...

  9. java aes加密 linux和windows,AES加密在windows與linux平台下顯示結果不同,解決方案

    現象描述: 在 windows 操作系統下加解密正常,但部署到 linux 環境中相同的輸入加密結果不正確,並且每次運行返回的結果都不同.也就是說在windows下加解密都正常,一但部署到linux下 ...

最新文章

  1. 区块链来了|未来注定将颠覆我们的生活,你值得先看看
  2. macappstore登不上去_荣耀亲选一度登机箱----一个安静得想放进大侄子的magic box
  3. CommonJS规范(转)
  4. 外部方法调用内部_私有属性和私有方法
  5. Linux下.rar文件解压
  6. MAC 安装 xctool 遇到的问题
  7. 上传文件的input问题以及FormData特性
  8. opacity透明度兼容性 css/js/query三种
  9. 制作 macOS High Sierra U盘USB启动安装盘方法教程 (全新安装 Mac 系统)
  10. ibatis sql_Map中出现异常:Cause: java.lang.RuntimeException: JavaBeansDataExchange could not instantiate..
  11. Java ME游戏编程_Java ME游戏编程(第2版)
  12. 用SYS本地登录或远程登录引起ORA-01031错误
  13. mysql 组复制详解_MySQL 5.7: 使用组复制(MySQL Group Replication)
  14. matlab抛物柱面画图,抛物柱面 - calculus的日志 - 网易博客
  15. SSL/TLS(3): CA证书解释
  16. 通过canvas画出爱心图案,表达你的爱意!
  17. 最长对称子串 作者 陈越单位 浙江大学
  18. 怎样将PDF水印删除 PDF删除水印的小技巧
  19. GithubPages教程 在GithubPages上搭建个人主页
  20. 练习1-自定义input组件库知识要点

热门文章

  1. 线上redis一般安在linux_redis的zset有多牛?请把耳朵递过来
  2. 成功解决AttributeError: module ‘tensorflow‘ has no attribute ‘placeholder‘
  3. Python编程语言学习:sklearn.manifold的TSNE函数的简介、使用方法、代码实现之详细攻略
  4. ML之KMeans:利用KMeans算法对Boston房价数据集(两特征+归一化)进行二聚类分析
  5. 成功解决TypeError: sequence item 0: expected str instance, list found
  6. LSTM:《Understanding LSTM Networks》的翻译并解读
  7. NLP之NBGBT:基于朴素贝叶斯(count/tfidf+网格搜索+4fCrva)、梯度提升树(w2c+网格搜索+4fCrva)算法对IMDB影评数据集进行文本情感分析(情感二分类预测)
  8. AI机器人:与智能机器人进行实时智能交互,想问什么就问什么
  9. CV之NS之VGG16:基于TF Slim(VGG16)利用七个不同的预训练模型实现快速NS风格
  10. Py之gensim:gensim的简介、安装、使用方法之详细攻略