Java AES256加密解密示例代碼
Java支持許多安全的加密算法,但是其中一些功能較弱,無法在安全性要求很高的應(yīng)用程序中使用。例如,數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)加密算法被認(rèn)為是高度不安全的。今天介紹一下AES 256加密解密。
什么是 AES 256?
- 高級加密標(biāo)準(zhǔn) (英語:Advanced Encryption Standard,縮寫:AES ),在密碼學(xué)中又稱Rijndael加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。
- AES是一種對稱加密算法。它旨在易于在硬件和軟件以及受限環(huán)境中實(shí)施,并提供針對各種攻擊技術(shù)的良好防御。AES是能夠使用大小為128、192和256位的密鑰處理128位塊的塊密碼。每個(gè)密碼分別使用128位,192位和256位的加密密鑰對128位塊中的數(shù)據(jù)進(jìn)行加密和解密。它使用相同的密鑰進(jìn)行加密和解密,因此發(fā)送方和接收方都必須知道并使用相同的秘密密鑰。
在下面的加密和解密示例中,我在UTF-8字符集中使用了base64編碼。用于顯示程序的輸出。也可以以字節(jié)數(shù)組格式存儲和驗(yàn)證數(shù)據(jù)。
AES 256加密
Java程序中,用于使用AES 256位對密碼(或任何信息)進(jìn)行加密。
private static String secretKey = "boooooooooom!!!!";
private static String salt = "ssshhhhhhhhhhh!!!!";
public static String encrypt(String strToEncrypt, String secret)
{
try
{
byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
IvParameterSpec ivspec = new IvParameterSpec(iv);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), salt.getBytes(), 65536, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivspec);
return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
}
catch (Exception e)
{
System.out.println("Error while encrypting: " + e.toString());
}
return null;
}
AES 256解密
Java程序,用于使用AES 256位解密密碼(或任何信息)。
private static String secretKey = "boooooooooom!!!!";
private static String salt = "ssshhhhhhhhhhh!!!!";
public static String decrypt(String strToDecrypt, String secret) {
try
{
byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
IvParameterSpec ivspec = new IvParameterSpec(iv);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
KeySpec spec = new PBEKeySpec(secretKey.toCharArray(), salt.getBytes(), 65536, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKeySpec secretKey = new SecretKeySpec(tmp.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, secretKey, ivspec);
return new String(cipher.doFinal(Base64.getDecoder().decode(strToDecrypt)));
}
catch (Exception e) {
System.out.println("Error while decrypting: " + e.toString());
}
return null;
}
測試AES256加密和解密方法
用一個(gè)簡單的字符串測試我們的AES256加密和解密方法
public static void main(String[] args)
{
String originalString = "www.csdn.net";
String encryptedString = AES.encrypt(originalString, secretKey) ;
String decryptedString = AES.decrypt(encryptedString, secretKey) ;
System.out.println(originalString);
System.out.println(encryptedString);
System.out.println(decryptedString);
}
輸出結(jié)果
www.csdn.net
biXhp3Ha1fgxVEp48zHrvVoXMStmxPuAPHo3TVz5lHU=
www.csdn.net
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java動(dòng)態(tài)代理和cglib動(dòng)態(tài)代理示例分享
這篇文章主要介紹了java動(dòng)態(tài)代理和cglib動(dòng)態(tài)代理示例,JDK1.3之后,Java提供了動(dòng)態(tài)代理的技術(shù),允許開發(fā)者在運(yùn)行期間創(chuàng)建接口的代理實(shí)例,下面我們使用示例學(xué)習(xí)一下2014-03-03
Java監(jiān)聽器三種實(shí)現(xiàn)方法代碼解析
這篇文章主要介紹了Java監(jiān)聽器三種實(shí)現(xiàn)方法代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析
這篇文章主要介紹了Java for循環(huán)Map集合優(yōu)化實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
Java最簡潔數(shù)據(jù)結(jié)構(gòu)之冒泡排序快速理解
冒泡排序是編程中數(shù)據(jù)結(jié)構(gòu)繞不過的一個(gè)基礎(chǔ)點(diǎn),有關(guān)于冒泡排序的文章也有很多,但可能會(huì)比較繚亂未能理解,本章將一子u為簡潔明了的例圖帶你通關(guān)冒泡排序2021-11-11
Java模擬HTTP Get Post請求 輕松實(shí)現(xiàn)校園BBS自動(dòng)回帖
這篇文章主要介紹了Java模擬HTTP Get Post請求,輕松實(shí)現(xiàn)校園BBS自動(dòng)回帖,感興趣的小伙伴們可以參考一下2015-12-12
Springboot+netty實(shí)現(xiàn)Web聊天室
這篇文章主要介紹了利用springboot+netty實(shí)現(xiàn)一個(gè)簡單Web聊天室,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)Java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-12-12
maven項(xiàng)目無法讀取到resource文件夾的問題
這篇文章主要介紹了maven項(xiàng)目無法讀取到resource文件夾的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

