Java中的AES加密和解密(CBC模式)
通过有线⽅式传输诸如纯⽂本密码之类的机密数据总是容易受到安全性的影响,始终建议对此类信息进⾏加密并使⽤SSL传输这些机密数据.Java为此提供了多种加密算法。在本⽂中,我们将讨论Java中具有CBC模式的AES(⾼级加密标准)对称加密算法,⽐3DES更快,更安全。
加密⽅式
众所周知,加密有2种基本类型-⾮对称和对称加密。 ⾮对称加密使⽤两个不同的密钥作为公共密钥和私有密钥,您可以在此处使⽤公共密钥对敏感信息进⾏加密,并使⽤匹配的私有密钥对相同信息进⾏解密。当涉及到两个不同的端点时,通常使⽤⾮对称加密,例如VPN客户端和服务器,SSH等
同样,我们还有另⼀种称为对称加密的加密技术。这种类型的加密使⽤称为私钥或秘密密钥的单个密钥对敏感信息进⾏加密和解密,与⾮对称加密相⽐,这种类型的加密速度⾮常快。对称加密的⼀些⽰例有Twofish,Blowfish,3 DES和AES。
什么是AES加密
AES代表⾼级加密系统及其对称加密算法,它是由美国国家标准技术研究院(NIST)于2001年建⽴的电⼦数据加密规范,此处是AES的。需要使⽤纯⽂本和密钥进⾏加密,并且需要相同的密钥才能再次对其
进⾏解密。
要查看AES加密的实际⼯作原理,可以检查⼀下–
输⼊可以是128位或192位或256位,并⽣成相应的密⽂位。
Java中的AES加密
以下是Java中执⾏AES加密的⽰例程序。在这⾥,我们使⽤具有CBC模式的AES来加密消息,因为ECB模式在语义上并不安全.IV模式也应随机分配给CBC模式。
如果使⽤相同的密钥来加密所有纯⽂本,并且如果攻击者到了该密钥,则可以以类似的⽅式解密所有密码。我们可以使⽤salt和迭代来进⼀步改进加密过程。在以下⽰例中,我们将使⽤128位加密密钥。这是 。
private static final String key = "aesEncryptionKey";
private static final String initVector = "encryptionIntVec";
public static String encrypt(String value) {
try {
IvParameterSpec iv = new Bytes("UTF-8"));
SecretKeySpec skeySpec = new Bytes("UTF-8"), "AES");
Cipher cipher = Instance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.Bytes());
deBase64String(encrypted);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
Other Interesting Posts
Spring Boot Security Password Encoding using Bcrypt Encoderthymeleaf用法
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 JavaConfig
Java中的AES解密
以下是解密密码的相反过程。代码具有⾃我解释性。
public static String decrypt(String encrypted) {
try {
IvParameterSpec iv = new Bytes("UTF-8"));
SecretKeySpec skeySpec = new Bytes("UTF-8"), "AES");
Cipher cipher = Instance("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互操作性。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论