Java中的AES加密和解密(CBC模式)
通過有線方式傳輸諸如純文本密碼之類的機(jī)密數(shù)據(jù)總是容易受到安全性的影響,始終建議對(duì)此類信息進(jìn)行加密并使用SSL傳輸這些機(jī)密數(shù)據(jù).Java為此提供了多種加密算法。在本文中,我們將討論Java中具有CBC模式的AES(高級(jí)加密標(biāo)準(zhǔn))對(duì)稱加密算法,比3DES更快,更安全。
加密方式
眾所周知,加密有2種基本類型-非對(duì)稱和對(duì)稱加密。 非對(duì)稱加密使用兩個(gè)不同的密鑰作為公共密鑰和私有密鑰,您可以在此處使用公共密鑰對(duì)敏感信息進(jìn)行加密,并使用匹配的私有密鑰對(duì)相同信息進(jìn)行解密。當(dāng)涉及到兩個(gè)不同的端點(diǎn)時(shí),通常使用非對(duì)稱加密,例如VPN客戶端和服務(wù)器,SSH等
同樣,我們還有另一種稱為對(duì)稱加密的加密技術(shù)。這種類型的加密使用稱為私鑰或秘密密鑰的單個(gè)密鑰對(duì)敏感信息進(jìn)行加密和解密,與非對(duì)稱加密相比,這種類型的加密速度非??臁?duì)稱加密的一些示例有Twofish,Blowfish,3 DES和AES。
什么是AES加密
AES代表高級(jí)加密系統(tǒng)及其對(duì)稱加密算法,它是由美國國家標(biāo)準(zhǔn)技術(shù)研究院(NIST)于2001年建立的電子數(shù)據(jù)加密規(guī)范,此處是AES的Wiki鏈接 。需要使用純文本和密鑰進(jìn)行加密,并且需要相同的密鑰才能再次對(duì)其進(jìn)行解密。
要查看AES加密的實(shí)際工作原理,可以檢查一下– AES加密工具
輸入可以是128位或192位或256位,并生成相應(yīng)的密文位。
Java中的AES加密
以下是Java中執(zhí)行AES加密的示例程序。在這里,我們使用具有CBC模式的AES來加密消息,因?yàn)镋CB模式在語義上并不安全.IV模式也應(yīng)隨機(jī)分配給CBC模式。
如果使用相同的密鑰來加密所有純文本,并且如果攻擊者找到了該密鑰,則可以以類似的方式解密所有密碼。我們可以使用salt和迭代來進(jìn)一步改進(jìn)加密過程。在以下示例中,我們將使用128位加密密鑰。這是在線AES加密工具 。
private static final String key = "aesEncryptionKey"; private static final String initVector = "encryptionIntVec";public static String encrypt(String value) {try {IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);byte[] encrypted = cipher.doFinal(value.getBytes());return Base64.encodeBase64String(encrypted);} catch (Exception ex) {ex.printStackTrace();}return null; }Other Interesting Posts Spring Boot Security Password Encoding using Bcrypt Encoder Spring Boot Security JWT Auth Example Spring Boot Security OAuth2 Example Spring Boot Security REST Basic Authentication Spring Boot Actuator Complete Guide Spring Boot Actuator Rest Endpoints Example Spring 5 Features and Enhancements Spring Boot Thymeleaf Example Spring Boot Security Hibernate Example with complete JavaConfig Securing REST API with Spring Boot Security Basic Authentication Websocket spring Boot Integration Without STOMP with complete JavaConfigJava中的AES解密
以下是解密密碼的相反過程。代碼具有自我解釋性。
public static String decrypt(String encrypted) {try {IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted));return new String(original);} catch (Exception ex) {ex.printStackTrace();}return null; }測(cè)試AES加密和解密
以下是main()實(shí)現(xiàn),以測(cè)試我們的AES實(shí)現(xiàn)。
public static void main(String[] args) {String originalString = "password";System.out.println("Original String to encrypt - " + originalString);String encryptedString = encrypt(originalString);System.out.println("Encrypted String - " + encryptedString);String decryptedString = decrypt(encryptedString);System.out.println("After decryption - " + decryptedString); }以下是結(jié)果。
結(jié)論
希望本文能為您提供所需的服務(wù)。 如果您有任何要添加或共享的內(nèi)容,請(qǐng)?jiān)谙旅娴脑u(píng)論部分中共享。在下一篇文章中,我們將討論javascript和Java之間的AES互操作性。
翻譯自: https://www.javacodegeeks.com/2018/03/aes-encryption-and-decryption-in-javacbc-mode.html
總結(jié)
以上是生活随笔為你收集整理的Java中的AES加密和解密(CBC模式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux服务器远程关机命令(linux
- 下一篇: Java 11将包含更多功能