使用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 ...
随机推荐
- golang几种post请求方式
get请求 get请求可以直接http.Get方法,非常简单. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func httpGet() { resp, err := h ...
- 【Android开发—智能家居系列】(三):手机连接WIFI模块
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 概述 实现连接WIFI的功能会用到一个工具类,源码可以点击链接下载.网上这些类似的工具类里的代码差不多是一样的.连接无线网主要有 ...
- hdu2204Eddy's爱好
大概题意是要你输出1到n中,可以表示成a^b的数,a,b都是大于0的整数的个数, 当中b大于1. 由于1到n中.可以全然开平方的个数就是(n^0.5)的整数部分. 以此类推能够得到,全然开立方.全然开 ...
- hdoj-1856-More is better【并查集】
More is better Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others) To ...
- [转]java类 对象 和构造方法
github地址:https://github.com/lily1010/java_learn/tree/master/dog java中对象和类 java中万物皆对象,比如说动物,里面有猫,狗,鱼等 ...
- Hive 外部表 分区表
之前主要研究oracle与mysql,认为hive事实上就是一种数据仓库的框架,也没有太多另类,所以主要精力都在研究hadoop.hbase,sqoop,mahout,近期略微用心看了下hive. ...
- [Servlet&JSP] 标准标签
在JSP的规范中提供了一些标准标签(Standard Tag),全部的容器都支持这些标签,它能够协助编写JSP时降低Scriptlet的使用. 全部的标准标签都使用jsp:作为前置.这些标准标签是在J ...
- gulp 安装时一直提示缺少模块( Cannot find module 'gulp-load-plugins')
我们要考虑两种情况? 1. 本地安装和全局安装gulp npm i -g gulp && npm i --save-dev gulp 2.新建package.json,然后手动填写缺少 ...
- string方法 PadLeft 返回一个新字符串,该字符串通过在此实例中的字符左侧填充指定的 Unicode 字符来达到指定的总长度,从而使这些字符右对齐。 PadRight 右边
- iGrimaceVX3.0和1.44在线源手机直接安装教程
[第一步] 先安装好三个组件设备必须是苹果越狱好后 确定6点几跟7点几的版本号才干够 首先打开cydia 选开发人员 以下 点软件源 点右上角编辑 1加入源 apt.25pp.com和IG包下载源a ...