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加密字符串的更多相关文章

  1. .net core 使用DES加密字符串

    找了很久,都是用的第三方的插件处理,但是第三方的插件不兼容.net core中内置包. 接下来分享自己的方法: 1.创建一个加密方法类:SecurityHelper. public class Sec ...

  2. linux md5 加密字符串和文件方法

    linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意 ...

  3. DES加密深度优化——随机生成加密字符串

    DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.但该算法一旦密钥固定,加密的字符串也就随之固定,这不利于数据存储安全.而且用该方法加密后有一个 ...

  4. Java生成MD5加密字符串代码实例

    这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下   (1)一般使用的数据库中都会保存用 ...

  5. php加密字符串超时不可解密

    <?php/** * 加密字符串在指定时间内解密有效 * @param  [type]  $string    明文字符串 * @param  string  $operation 解密值为DE ...

  6. 解决AES算法CBC模式加密字符串后再解密出现乱码问题

    问题 在使用 AES CBC 模式加密字符串后,再进行解密,解密得到的字符串出现乱码情况,通常都是前几十个字节乱码: 复现 因为是使用部门 cgi AESEncryptUtil 库,找到问题后,在这里 ...

  7. [小问题笔记(五)] 用SQL加密字符串(MD5、SHA1),顺便解决读取数据加密后不一样的问题

    这里用到SQL Server内置的函数 HashBytes(). select HashBytes('MD5','bubu') select HashBytes('SHA1','bubu') 以MD5 ...

  8. iOS开发之Objective-c的AES128加密和解密算法的实现

    #import <Foundation/Foundation.h> #import <CommonCrypto/CommonDigest.h> #import <Comm ...

  9. iOS中MD5加密字符串实现

    1.MD5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321 ...

随机推荐

  1. 内核调试 SystemTap

    http://www.cnblogs.com/wangkangluo1/archive/2012/06/26/2562971.html   相关技术:utrace, probe, ftrace, dt ...

  2. Apdex——衡量服务器性能的标准

    Apdex 全称是 Application Performance Index,是由 Apdex 联盟开放的用于评估应用性能的工业标准.Apdex 联盟起源于 2004 年,由 Peter Sevci ...

  3. 自动化中间人攻击工具subterfuge小实验

    Subterfuge是一款用python写的中间人攻击框架,它集成了一个前端和收集了一些著名的可用于中间人攻击的安全工具. Subterfuge主要调用的是sslstrip,sslstrip 是08 ...

  4. ActiveMQ消息的延时和定时投递

    ActiveMQ对消息延时和定时投递做了很好的支持,其内部启动Scheduled来对该功能支持,也提供了一个封装的消息类型:org.apache.activemq.ScheduledMessage,只 ...

  5. LSA、LDA

     Latent semantic analysis (LSA) is a technique in natural language processing, in particular distrib ...

  6. BUPT复试专题—三元组(2016)

    题目描述 给你一个长度为m的数组(数组元素从0到m-1),如果数组里有a[i]+a[j]==a[k](i,j,k大于等于0并且小于m),便称之为三元组.现在给你一个数组,让你求三元组的个数. 例如m为 ...

  7. C++字符串转数字,数字转字符串

    1. 字符串转数字 如将"32"转为32,将"3.1415"转为3.1415,将"567283"转为567283.使用: //Convert ...

  8. postgresql 导出建表语句的方法-类似describe table

    https://www.youtube.com/watch?v=PMfcsYzj-9M  这个视频不错, The Definitive Guide to Object-Oriented JavaScr ...

  9. HDU 2845 Beans (两次线性dp)

    Beans Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  10. 怎样改动X-code中的字体大小、颜色