Java AES密码盐加密

import lombok.extern.slf4j.Slf4j;
import org.apache.tomcat.util.codec.binary.Base64;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
@Slf4j
public class PasswordUtil {/*** 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作.* 盐长度必须为20字节* @return byte[] 盐值* */public static String getSalt(){try {//实例化安全随机数SecureRandom random = new SecureRandom();KeyGenerator kg= KeyGenerator.getInstance("AES");//初始化密钥生成器,AES要求密钥长度为128位、192位、256位kg.init(128);byte[] encoded = kg.generateKey().getEncoded();//产出盐return Base64.encodeBase64String(encoded);}catch (Exception e){log.error("获取密码盐错误:{}",e.getMessage(),e);throw new BaseException(601,"获取密码盐错误");}}/*** 加密明文字符串** @param password 生成密钥时所使用的密码* @return 加密后的密文字符串* @throws Exception*/public static String encrypt(String password,String salt){try{SecretKey key=new SecretKeySpec(Base64.decodeBase64(salt),"AES");Cipher cipher= Cipher.getInstance("AES/GCM/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key);byte[] iv = cipher.getIV();assert iv.length == 12;byte[]  encryptData = cipher.doFinal(password.getBytes());assert encryptData.length == password.getBytes().length + 16;byte[] message = new byte[12 + password.getBytes().length + 16];System.arraycopy(iv, 0, message, 0, 12);System.arraycopy(encryptData, 0, message, 12, encryptData.length);if (message.length < 12 + 16) {throw new IllegalArgumentException();}return Base64.encodeBase64String(message);}catch (Exception e){log.error("密码加密错误:{}",e.getMessage(),e);throw new BaseException(602,"密码加密错误");}}/*** 解密密文字符串** @return 解密后的明文字符串* @throws Exception*/public static String decrypt(String password,String salt){try{byte[] bytes = Base64.decodeBase64(password);SecretKey key=new SecretKeySpec(Base64.decodeBase64(salt),"AES");Cipher cipher= Cipher.getInstance("AES/GCM/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key);GCMParameterSpec params = new GCMParameterSpec(128, bytes, 0, 12);cipher.init(Cipher.DECRYPT_MODE, key, params);byte[]  decryptData = cipher.doFinal(bytes, 12, bytes.length - 12);return new String(decryptData);}catch (Exception e){log.error("密码解密错误:{}",e.getMessage(),e);throw new BaseException(602,"密码解密错误");}}public static void main(String[] args) {String password="1234567";String salt = getSalt();String encrypt = encrypt(password, salt);System.out.println(encrypt);String decrypt = decrypt(encrypt, salt);System.out.println(decrypt);}
}

Java AES密码盐加密相关推荐

  1. java AES文件流加密

    java AES文件流加密 文章转载自:https://www.cnblogs.com/gne-hwz/p/14736496.html java工具类-对称加密算法AES 加密文件流 工具类出自jdk ...

  2. python aes 加盐 加密解密

    python aes 加盐 加密解密 爬虫就是在学习的过程,前几天从某网站的js里学到的加密方式,通过下断点弄清加密原理后,用python复现一下,在这里和大家分享下 #--------引入模块--- ...

  3. Go Nodejs Java Aes 128 ECB加密解密结果保持一致

    在多语言的生产环境下,常常是由一种语言进行加密而由另一种语言来进行解密,因此有必要保持各种语言之间加密解密算法的一致性.下面列出了Go,Nodejs,Java 的 Aes-128-Ecb的加密解密算法 ...

  4. java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密

    如何在JAVA中使用MD5加密对密码进行加密 发布时间:2020-11-25 17:12:40 来源:亿速云 阅读:118 作者:Leah 本篇文章为大家展示了如何在JAVA中使用MD5加密对密码进行 ...

  5. 如何使用Java对密码进行加密 Java Sah加密方式帮你实现加密

    我们在Web开发中,经常要保证密码的安全性,那么怎么对密码进行处理了?首先得进行加密吧!下面我介绍下Java 提供的SHA加密方式: SHA (Secure Hash Algorithm,译作安全散列 ...

  6. java aes cfb 256_aes加密解密源码,包括aes128、aes192、aes256位,以及cbc、cfb、ecb、ofb、pcbc模式...

    AES加解密总共有以下这些 算法/模式/填充                 字节加密后数据长度       不满16字节加密后长度 AES/CBC/NoPadding                 ...

  7. Golang将密码盐加密

    代码地址:https://gitcode.net/m0_51510236/go_password 首先我们来初始化一个项目 go mod init go_password golang密码加密我们可以 ...

  8. 密码加密 加盐 Java PBKDF2 密码哈希代码

    如果你是Web开发者,你很可能需要开发一个用户账户系统.这个系统最重要的方面,就是怎样保护用户的密码.存放帐号的数据库经常成为入侵的目标,所以你必须做点什么来保护密码,以防网站被攻破时发生危险.最好的 ...

  9. Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理

    前言 在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的.最经典的就是密码了.如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的. 那么我们就 ...

最新文章

  1. Python基础知识(第一天)
  2. 编程语言与思维:科技公司如何自我重构?
  3. 记录Hibernate的缓存知识
  4. 平板游戏问题(luogu 2003/2018 特长生 T4)
  5. JeeWx 捷微二代微信活动平台1.0发布!活动插件持续开源更新!
  6. python机器人方向怎么学_学习如何使用 Python 构建你自己的 Twitter 机器人
  7. 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-2 动画过渡
  8. 软件测试中的测试报告
  9. pmp效益管理计划和做题技巧
  10. kubernetes kind类型之Deployment
  11. 【建议收藏】1000套HTML静态网页设计期末大作业 (HTML+CSS+JS)
  12. LeetCode Word Abbreviation
  13. 模仿6ecc 主页 主体部分(查看附件点击6eccHTML 就会看到如下页面效果)
  14. 关于1NF、2NF、3NF、BCNF范式
  15. 实验三 XSS和SQL注入
  16. Win11如何给应用换图标?Win11给应用换图标的方法
  17. 深度linux 修复命令,修复启动
  18. unity2D:无限跳跃bug和卡墙bug处理
  19. Oracle优化培训笔记-第一节
  20. python rich_Python青年如何变富(Rich)?

热门文章

  1. Linux httpd配置
  2. C++ STL : advance
  3. cocos2d-x JS 四人麻将中的服务器位置与客户端位置转换相关
  4. 如何在浏览器中使用TOR
  5. 数组增强for循环遍历
  6. 叔本华论艺术和科学的一段话
  7. Hook textout可能遇到的问题
  8. C#窗体美化(CSKin组件)
  9. oracle spool文件名+系统时间,Oracle Spool详解
  10. 如何实现微信公众号自动回复