Java中的AES加密和解密(CBC模式)
通過有線方式傳輸諸如純文本密碼之類的機密數據總是容易受到安全性的影響,始終建議對此類信息進行加密并使用SSL傳輸這些機密數據.Java為此提供了多種加密算法。在本文中,我們將討論Java中具有CBC模式的AES(高級加密標準)對稱加密算法,比3DES更快,更安全。
加密方式
眾所周知,加密有2種基本類型-非對稱和對稱加密。 非對稱加密使用兩個不同的密鑰作為公共密鑰和私有密鑰,您可以在此處使用公共密鑰對敏感信息進行加密,并使用匹配的私有密鑰對相同信息進行解密。當涉及到兩個不同的端點時,通常使用非對稱加密,例如VPN客戶端和服務器,SSH等
同樣,我們還有另一種稱為對稱加密的加密技術。這種類型的加密使用稱為私鑰或秘密密鑰的單個密鑰對敏感信息進行加密和解密,與非對稱加密相比,這種類型的加密速度非常快。對稱加密的一些示例有Twofish,Blowfish,3 DES和AES。
什么是AES加密
AES代表高級加密系統及其對稱加密算法,它是由美國國家標準技術研究院(NIST)于2001年建立的電子數據加密規范,此處是AES的Wiki鏈接 。需要使用純文本和密鑰進行加密,并且需要相同的密鑰才能再次對其進行解密。
要查看AES加密的實際工作原理,可以檢查一下– AES加密工具
輸入可以是128位或192位或256位,并生成相應的密文位。
Java中的AES加密
以下是Java中執行AES加密的示例程序。在這里,我們使用具有CBC模式的AES來加密消息,因為ECB模式在語義上并不安全.IV模式也應隨機分配給CBC模式。
如果使用相同的密鑰來加密所有純文本,并且如果攻擊者找到了該密鑰,則可以以類似的方式解密所有密碼。我們可以使用salt和迭代來進一步改進加密過程。在以下示例中,我們將使用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; }測試AES加密和解密
以下是main()實現,以測試我們的AES實現。
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); }以下是結果。
結論
希望本文能為您提供所需的服務。 如果您有任何要添加或共享的內容,請在下面的評論部分中共享。在下一篇文章中,我們將討論javascript和Java之間的AES互操作性。
翻譯自: https://www.javacodegeeks.com/2018/03/aes-encryption-and-decryption-in-javacbc-mode.html
總結
以上是生活随笔為你收集整理的Java中的AES加密和解密(CBC模式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux服务器远程关机命令(linux
- 下一篇: ReSQL的?