使用AES128加密字符串
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils; import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.SecureRandom; /**
* 字符串AES128加密 <加盐>
*
* @author XuBaofeng.
* @date 2018-10-11 18:55.
*/
@Slf4j
public class Aes128Util { private static final String KEY_ALGORITHM = "AES";
private static final String SHA1_PRNG = "SHA1PRNG";
/*** 字符编码 ***/
private static final String CHARACTER_CODING = "UTF-8";
/*** 默认的加密算法 ***/
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";
/*** 默认的盐 ***/
private static final String DEFAULT_SECRET_KEY = "yanwu0527@163.com"; /**
* AES 加密操作, 使用默认盐
*
* @param content 待加密内容
* @return 返回Base64转码后的加密数据
*/
public static String encrypt(String content) {
return encrypt(content, DEFAULT_SECRET_KEY);
} /**
* AES 加密操作, 自定义盐
*
* @param content 待加密内容
* @param key 秘钥
* @return 返回Base64转码后的加密数据
*/
public static String encrypt(String content, String key) {
if (StringUtils.isBlank(content)) {
return content;
}
if (StringUtils.isBlank(key)) {
key = DEFAULT_SECRET_KEY;
}
try {
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
byte[] byteContent = content.getBytes(CHARACTER_CODING);
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(key));
byte[] result = cipher.doFinal(byteContent);
return Base64.encodeBase64String(result);
} catch (Exception e) {
log.error("String: [{}] Aes128Util encryption error.", content, e);
}
return null;
} /**
* AES 解密操作, 使用默认盐
*
* @param content 待解密内容
* @return 解密数据
*/
public static String decrypt(String content) {
return decrypt(content, DEFAULT_SECRET_KEY);
} /**
* AES 解密操作, 自定义盐
*
* @param content 待解密内容
* @param key 秘钥
* @return 解密数据
*/
public static String decrypt(String content, String key) {
if (StringUtils.isBlank(content)) {
return content;
}
if (StringUtils.isBlank(key)) {
key = DEFAULT_SECRET_KEY;
}
try {
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, getSecretKey(key));
byte[] result = cipher.doFinal(Base64.decodeBase64(content));
return new String(result, CHARACTER_CODING);
} catch (Exception e) {
log.error("String: [{}] Aes128Util decryption error.", content, e);
}
return null;
} /**
* 生成加密秘钥
*
* @return
*/
private static SecretKey getSecretKey(String key) throws Exception {
SecureRandom secureRandom = SecureRandom.getInstance(SHA1_PRNG);
secureRandom.setSeed(key.getBytes());
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
kg.init(secureRandom);
return kg.generateKey();
} }
使用AES128加密字符串的更多相关文章
- .net core 使用DES加密字符串
找了很久,都是用的第三方的插件处理,但是第三方的插件不兼容.net core中内置包. 接下来分享自己的方法: 1.创建一个加密方法类:SecurityHelper. public class Sec ...
- linux md5 加密字符串和文件方法
linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意 ...
- DES加密深度优化——随机生成加密字符串
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.但该算法一旦密钥固定,加密的字符串也就随之固定,这不利于数据存储安全.而且用该方法加密后有一个 ...
- Java生成MD5加密字符串代码实例
这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ...
- php加密字符串超时不可解密
<?php/** * 加密字符串在指定时间内解密有效 * @param [type] $string 明文字符串 * @param string $operation 解密值为DE ...
- 解决AES算法CBC模式加密字符串后再解密出现乱码问题
问题 在使用 AES CBC 模式加密字符串后,再进行解密,解密得到的字符串出现乱码情况,通常都是前几十个字节乱码: 复现 因为是使用部门 cgi AESEncryptUtil 库,找到问题后,在这里 ...
- [小问题笔记(五)] 用SQL加密字符串(MD5、SHA1),顺便解决读取数据加密后不一样的问题
这里用到SQL Server内置的函数 HashBytes(). select HashBytes('MD5','bubu') select HashBytes('SHA1','bubu') 以MD5 ...
- iOS开发之Objective-c的AES128加密和解密算法的实现
#import <Foundation/Foundation.h> #import <CommonCrypto/CommonDigest.h> #import <Comm ...
- iOS中MD5加密字符串实现
1.MD5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321 ...
随机推荐
- Spring的IoC容器概述
以下内容引用自http://wiki.jikexueyuan.com/project/spring/ioc-containers.html: IoC容器 Spring容器是Spring框架的核心.容器 ...
- 一起学习CMake – 01
一起学习CMake – 01 本节介绍CMake里最常用的三个命令,分别是cmake_minimum_required; project; add_executable等. CMake是个好东西,在使 ...
- 使用nginx转发不了静态文件
从django runserver的请求来看,都收不到静态文件请求, 查看firefox的web console请求,发现都是403 然后发现nginx不在当前用户组,并且当前用户的项目的读写权限是7 ...
- Redhat常用指令
yum 部分常用的命令包括: 自动搜索最快镜像插件:yum install yum-fastestmirror 安装yum图形窗口插件:yum install yumex 查看可能批量安装的列表:yu ...
- ElasticSearch生产模式开发模式的区分
ElasticSearch生产模式开发模式的区分 network.host: 0.0.0.0 如果network.host不是localhost就是生产模式, 开发模式中的warning就是生产模式中 ...
- JavaScript与Java通信
1.WebView中JavaScript调用Android程序中Java: 使用WebView类中的addJavascriptInterface()方法,能够使用它扩展嵌入式浏览器内的DOM(文档对象 ...
- webform的操作完之后返回主页面的行定位
1.在repeater表格的行绑定时给行一个id(唯一id),此地方为绑定该表格的主键. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDA3OD ...
- mysql下distinct和group by区别对比
在数据表中记录了用户验证时使用的书目,现在想取出所有书目,用DISTINCT和group by都取到了我想要的结果,但我发现返回结果排列不同,distinct会按数据存放顺序一条条显示,而group ...
- eclipse 添加库
Window ->Preferences ->Java ->Build Path ->User Libraries New,起个名字,如myLibrary add jars,添 ...
- SHOW PROCESSLIST Syntax
https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html SHOW PROCESSLIST shows you which threa ...