博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AES加密
阅读量:7291 次
发布时间:2019-06-30

本文共 3131 字,大约阅读时间需要 10 分钟。

AES加密,就是对称加密。分享牛系列,分享牛专栏,分享牛。客户端可以保存一个密钥,调用加密的值传入需要加密的值,然后程序根据密钥算出一个新的值,当然了解密也需要,对应的密钥才可以解密。

写一个程序如下:

/** * */ import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec; import java.util.HashMap;import java.util.Map; /** * @author qq 1515308 */public class AESEncrypter {public static void main(String[] args) {String encryptAsString = new AESEncrypter().encrypt("qq:1515308");System.out.println(encryptAsString);String decryptAsString = new AESEncrypter().decryptAsString(encryptAsString);System.out.println(decryptAsString);}     private static String aesKeyStr = "NGQxNmUwMjM4M2Y0MTI2MTM3NDI0Y2MxMjA1N2IyNDM=";     private SecretKey aesKey;     private AESEncrypter() {        aesKey = loadAesKey();    }     private AESEncrypter(String aes) {        aesKey = loadAesKey(aes);    }     private static AESEncrypter INSTANCE;     private static Map
INSTANCES = new HashMap<>(); public static AESEncrypter getInstance() { if (INSTANCE == null) { synchronized (aesKeyStr) { if (INSTANCE == null) { INSTANCE = new AESEncrypter(); } } } return INSTANCE; } public static AESEncrypter getInstance(String aes) { if (INSTANCES.get(aes) == null) { synchronized (aesKeyStr) { if (INSTANCES.get(aes) == null) { INSTANCES.put(aes, new AESEncrypter(aes)); } } } return INSTANCES.get(aes); } public String encrypt(String msg) { try { Cipher ecipher = Cipher.getInstance("AES"); ecipher.init(Cipher.ENCRYPT_MODE, aesKey); return Encrypter.toHexString(ecipher.doFinal(msg.getBytes())); } catch (Exception e) { String errMsg = "decrypt error, data:" + msg; throw new EncrypterException(errMsg, e); } } public byte[] decrypt(String msg) { try { Cipher dcipher = Cipher.getInstance("AES"); dcipher.init(Cipher.DECRYPT_MODE, aesKey); return dcipher.doFinal(Encrypter.toBytes(msg)); } catch (Exception e) { String errMsg = "decrypt error, data:" + msg; throw new EncrypterException(errMsg, e); } } public String decryptAsString(String msg) { return new String(this.decrypt(msg)); } private static SecretKey loadAesKey() { String buffer = new String(Base64.decodeBase64(aesKeyStr)); byte[] keyStr = Encrypter.toBytes(buffer); SecretKeySpec aesKey = new SecretKeySpec(keyStr, "AES"); return aesKey; } private static SecretKey loadAesKey(String aesKeyStr) { String buffer = new String(Base64.decodeBase64(aesKeyStr)); byte[] keyStr = Encrypter.toBytes(buffer); SecretKeySpec aesKey = new SecretKeySpec(keyStr, "AES"); return aesKey; }}

程序的输出如下:

ac8f63257d3d0e85844b4d74269bd153

qq:1515308

加密解密是OK的。

分享牛系列,分享牛专栏,分享牛。 分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) 师交流群 523988350 qq:1515308

你可能感兴趣的文章
WEB安全实战(五)XSS 攻击的第二种解决方式(推荐)
查看>>
Gliffy
查看>>
[51单片机] 以PWM控制直流电机为例建一个简单的51工程框架
查看>>
随记MySQL的时间差函数(TIMESTAMPDIFF、DATEDIFF)、日期转换计算函数(date_add、day、date_format、str_to_date)...
查看>>
左求值表达式,堆栈,调试陷阱与ORM查询语言的设计
查看>>
spring源码分析之spring-jdbc模块详解
查看>>
STM32的USART DMA传输(转)
查看>>
mac 刻录ISO系统盘
查看>>
Genymotion中SD卡目录在Eclipse中查看,以及创建SDCard
查看>>
BZOJ 2298: [HAOI2011]problem a 动态规划
查看>>
精度与分辨率是一回事吗
查看>>
徕卡×天猫超级品牌日 全球奢侈大牌的中国互联网之路
查看>>
奇葩说为小米开专场,Max2的续航能力真的那么强大吗?
查看>>
芝麻信用又有大动作!让外国公司也流口水的免押金新形态来了
查看>>
哪些你知道或不知道的css,在这里或许都齐全
查看>>
技术周刊(2019-01-07 CSS 动画 )
查看>>
runtime?虐我千百遍==、
查看>>
centos下实现pm2自动化部署
查看>>
JavaScript之this详解
查看>>
苹果Facetime支持32人视频通话,一年前,即构科技已经做到了
查看>>