
java aes加密是什么,讓我們一起了解一下?
java aes加密是一種對稱的分組加密技術,使用128位分組加密數(shù)據(jù),提供比WEP/TKIPS的RC4算法更高的加密強度。AES具有應用范圍廣、等待時間短、相對容易隱藏、吞吐量高等優(yōu)點。

JAVA是如何實現(xiàn)AES加密的?(兩種方法)
方法一:
/**
?*AES加密解密工具類
?*@author?M-Y
?*/
public?class?AESUtil?{
??????private?static?final?Logger?logger?=?Logger.getLogger(AESUtil.class);
??????private?static?final?String?defaultCharset?=?"UTF-8";
??????private?static?final?String?KEY_AES?=?"AES";
??????private?static?final?String?KEY?=?"123456";
????/**
?????*?加密
?????*
?????*?@param?data?需要加密的內(nèi)容
?????*?@param?key?加密密碼
?????*?@return
?????*/
????public?static?String?encrypt(String?data,?String?key)?{
????????return?doAES(data,?key,?Cipher.ENCRYPT_MODE);
????}
?
????/**
?????*?解密
?????*
?????*?@param?data?待解密內(nèi)容
?????*?@param?key?解密密鑰
?????*?@return
?????*/
????public?static?String?decrypt(String?data,?String?key)?{
????????return?doAES(data,?key,?Cipher.DECRYPT_MODE);
????}
?
????/**
?????*?加解密
?????*
?????*?@param?data?待處理數(shù)據(jù)
?????*?@param?password??密鑰
?????*?@param?mode?加解密mode
?????*?@return
?????*/
????private?static?String?doAES(String?data,?String?key,?int?mode)?{
????????try?{
????????????if?(StringUtils.isBlank(data)?||?StringUtils.isBlank(key))?{
????????????????return?null;
????????????}
????????????//判斷是加密還是解密
????????????boolean?encrypt?=?mode?==?Cipher.ENCRYPT_MODE;
????????????byte[]?content;
????????????//true?加密內(nèi)容?false?解密內(nèi)容
????????????if?(encrypt)?{
????????????????content?=?data.getBytes(defaultCharset);
????????????}?else?{
????????????????content?=?parseHexStr2Byte(data);
????????????}
????????????//1.構(gòu)造密鑰生成器,指定為AES算法,不區(qū)分大小寫
????????????KeyGenerator?kgen?=?KeyGenerator.getInstance(KEY_AES);
????????????//2.根據(jù)ecnodeRules規(guī)則初始化密鑰生成器
????????????//生成一個128位的隨機源,根據(jù)傳入的字節(jié)數(shù)組
????????????kgen.init(128,?new?SecureRandom(key.getBytes()));
????????????//3.產(chǎn)生原始對稱密鑰
????????????SecretKey?secretKey?=?kgen.generateKey();
????????????//4.獲得原始對稱密鑰的字節(jié)數(shù)組
????????????byte[]?enCodeFormat?=?secretKey.getEncoded();
????????????//5.根據(jù)字節(jié)數(shù)組生成AES密鑰
????????????SecretKeySpec?keySpec?=?new?SecretKeySpec(enCodeFormat,?KEY_AES);
????????????//6.根據(jù)指定算法AES自成密碼器
????????????Cipher?cipher?=?Cipher.getInstance(KEY_AES);//?創(chuàng)建密碼器
????????????//7.初始化密碼器,第一個參數(shù)為加密(Encrypt_mode)或者解密解密(Decrypt_mode)操作,第二個參數(shù)為使用的KEY
????????????cipher.init(mode,?keySpec);//?初始化
????????????byte[]?result?=?cipher.doFinal(content);
????????????if?(encrypt)?{
????????????????//將二進制轉(zhuǎn)換成16進制
????????????????return?parseByte2HexStr(result);
????????????}?else?{
????????????????return?new?String(result,?defaultCharset);
????????????}
????????}?catch?(Exception?e)?{
????????????logger.error("AES?密文處理異常",?e);
????????}
????????return?null;
????}
????/**
?????*?將二進制轉(zhuǎn)換成16進制
?????*
?????*?@param?buf
?????*?@return
?????*/
????public?static?String?parseByte2HexStr(byte?buf[])?{
????????StringBuilder?sb?=?new?StringBuilder();
????????for?(int?i?=?0;?i?輸出結(jié)果:
加密前:{'repairPhone':'18547854787','customPhone':'12365478965','captchav':'58m7'}
加密密鑰和解密密鑰:123456
加密后:2A3D75862E69BF61DFAD94017E930227A715C8E533AA1A12361D6BE6E190EC5EE77AA66CAC8005A643BFB26134EE60398C30104B1F7FB3CC6B78795368A86D8215B88A5C80D9C2E4936EEEB0DECA7A88
解密后:{'repairPhone':'18547854787','customPhone':'12365478965','captchav':'58m7'}方法二:替換AESUtil 類中的doAES方法并加上以下成員。
private?static?final?String?KEY_MD5?=?"MD5";
????private?static?MessageDigest?md5Digest;
?
????static?{
????????try?{
????????????md5Digest?=?MessageDigest.getInstance(KEY_MD5);
????????}?catch?(NoSuchAlgorithmException?e)?{
????????????//
????????}
????}
doAES方法:
/**
?????*?加解密
?????*
?????*?@param?data
?????*?@param?key
?????*?@param?mode
?????*?@return
?????*/
????private?static?String?doAES(String?data,?String?key,?int?mode)?{
????????try?{
????????????if?(StringUtils.isBlank(data)?||?StringUtils.isBlank(key))?{
????????????????return?null;
????????????}
????????????boolean?encrypt?=?mode?==?Cipher.ENCRYPT_MODE;
????????????byte[]?content;
????????????//true?加密內(nèi)容?false?解密內(nèi)容
????????????if?(encrypt)?{
????????????????content?=?data.getBytes(defaultCharset);
????????????}?else?{
?????????????????content?=?parseHexStr2Byte(data);
????????????}
????????????SecretKeySpec?keySpec?=?new?SecretKeySpec(md5Digest.digest(key.getBytes(defaultCharset)),?KEY_AES);//構(gòu)造一個密鑰
????????????Cipher?cipher?=?Cipher.getInstance(KEY_AES);//?創(chuàng)建密碼器
????????????cipher.init(mode,?keySpec);//?初始化
????????????byte[]?result?=?cipher.doFinal(content);//加密或解密
????????????if?(encrypt)?{
????????????????return?parseByte2HexStr(result);
????????????}?else?{
????????????????return?new?String(result,?defaultCharset);
????????????}
????????}?catch?(Exception?e)?{
????????????logger.error("AES?密文處理異常",?e);
????????}
????????return?null;
????}以上就是小編今天的分享了,希望可以幫助到大家。
