Java AES密码盐加密
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密码盐加密相关推荐
- java AES文件流加密
java AES文件流加密 文章转载自:https://www.cnblogs.com/gne-hwz/p/14736496.html java工具类-对称加密算法AES 加密文件流 工具类出自jdk ...
- python aes 加盐 加密解密
python aes 加盐 加密解密 爬虫就是在学习的过程,前几天从某网站的js里学到的加密方式,通过下断点弄清加密原理后,用python复现一下,在这里和大家分享下 #--------引入模块--- ...
- Go Nodejs Java Aes 128 ECB加密解密结果保持一致
在多语言的生产环境下,常常是由一种语言进行加密而由另一种语言来进行解密,因此有必要保持各种语言之间加密解密算法的一致性.下面列出了Go,Nodejs,Java 的 Aes-128-Ecb的加密解密算法 ...
- java对密码进行加密的方法_如何在JAVA中使用MD5加密对密码进行加密
如何在JAVA中使用MD5加密对密码进行加密 发布时间:2020-11-25 17:12:40 来源:亿速云 阅读:118 作者:Leah 本篇文章为大家展示了如何在JAVA中使用MD5加密对密码进行 ...
- 如何使用Java对密码进行加密 Java Sah加密方式帮你实现加密
我们在Web开发中,经常要保证密码的安全性,那么怎么对密码进行处理了?首先得进行加密吧!下面我介绍下Java 提供的SHA加密方式: SHA (Secure Hash Algorithm,译作安全散列 ...
- java aes cfb 256_aes加密解密源码,包括aes128、aes192、aes256位,以及cbc、cfb、ecb、ofb、pcbc模式...
AES加解密总共有以下这些 算法/模式/填充 字节加密后数据长度 不满16字节加密后长度 AES/CBC/NoPadding ...
- Golang将密码盐加密
代码地址:https://gitcode.net/m0_51510236/go_password 首先我们来初始化一个项目 go mod init go_password golang密码加密我们可以 ...
- 密码加密 加盐 Java PBKDF2 密码哈希代码
如果你是Web开发者,你很可能需要开发一个用户账户系统.这个系统最重要的方面,就是怎样保护用户的密码.存放帐号的数据库经常成为入侵的目标,所以你必须做点什么来保护密码,以防网站被攻破时发生危险.最好的 ...
- Java使用MD5加盐对密码进行加密处理,附注册和登录加密解密处理
前言 在开发的时候,有一些敏感信息是不能直接通过明白直接保存到数据库的.最经典的就是密码了.如果直接把密码以明文的形式入库,不仅会泄露用户的隐私,对系统也是极其的不厉,这样做是非常危险的. 那么我们就 ...
最新文章
- Python基础知识(第一天)
- 编程语言与思维:科技公司如何自我重构?
- 记录Hibernate的缓存知识
- 平板游戏问题(luogu 2003/2018 特长生 T4)
- JeeWx 捷微二代微信活动平台1.0发布!活动插件持续开源更新!
- python机器人方向怎么学_学习如何使用 Python 构建你自己的 Twitter 机器人
- 玩转Bootstrap(JS插件篇)-第1章 模态弹出框 :1-2 动画过渡
- 软件测试中的测试报告
- pmp效益管理计划和做题技巧
- kubernetes kind类型之Deployment
- 【建议收藏】1000套HTML静态网页设计期末大作业 (HTML+CSS+JS)
- LeetCode Word Abbreviation
- 模仿6ecc 主页 主体部分(查看附件点击6eccHTML 就会看到如下页面效果)
- 关于1NF、2NF、3NF、BCNF范式
- 实验三 XSS和SQL注入
- Win11如何给应用换图标?Win11给应用换图标的方法
- 深度linux 修复命令,修复启动
- unity2D:无限跳跃bug和卡墙bug处理
- Oracle优化培训笔记-第一节
- python rich_Python青年如何变富(Rich)?