什么是Java AES 加密和解密?
Java作为一种编程语言在技术领域引入了一种新方法。 Java在用于编码的技术中位居榜首。 Java应用程序设计公司可以做任何事情,从综合商业软件到移动电话和无线设备的应用程序。无所不在的此软件支持始终通过功能方法嵌入,并已合并到常见的 Internet 浏览器中。这意味着加密和解码都使用类似的密钥。 (AES)是一种普遍使用的密钥加密计算。
以多种方式保护数据传输。但大多数专家认为数据加密是最好的方法,目前, Java AES 是一种可用于加密的高级解决方案。新算法正在将 DES 的旧值替换为 AES。它在机密属性、数据身份验证和高度完整性方面拥有更好的遗产。
让我们开始破解解密以及使用单个密钥进行加密。与其他保护敏感信息的方法相比,这是一个巨大的优势。它是需要保护敏感信息的政府机构和金融机构的最佳解决方案。
对称加密标准的普及
随着网络安全问题的出现,使用 AES 作为高级方法成为最佳选择,因为它具有 3 块密码。他们可以使用加密密钥对 128 位块进行加扰。发送方和接收方都拥有相同的密钥,以保持信息的机密性。这使其成为一种灵活且安全的工具。它在固定的块模式或使用数据位的流模式下工作。目前,这些应用程序普遍用于电子邮件通信、TLS 以及即时消息传递。
为 AES 选择正确的填充方案
在分组密码模式下,将明文转换为分组大小进行加密。这里需要填充, Java提供了 3 种替代方法。对于编码,AES 算法本质上是重复的,支持 128、192 和 256 位。
它的功能类似于以下模式。
- 电子码本
- 密码阻塞链
- 密码反馈
- 输出反馈
- 柜台
- 伽罗华/计数器模式
需要选择密钥才能使应用程序面向未来。
Java
// Java program to demonstrate the creation
// of Encryption and Decryption with Java AES
import java.nio.charset.StandardCharsets;
import java.security.spec.KeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;
class AES {
// Class private variables
private static final String SECRET_KEY
= "my_super_secret_key_ho_ho_ho";
private static final String SALT = "ssshhhhhhhhhhh!!!!";
// This method use to encrypt to string
public static String encrypt(String strToEncrypt)
{
try {
// Create default byte array
byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 };
IvParameterSpec ivspec
= new IvParameterSpec(iv);
// Create SecretKeyFactory object
SecretKeyFactory factory
= SecretKeyFactory.getInstance(
"PBKDF2WithHmacSHA256");
// Create KeySpec object and assign with
// constructor
KeySpec spec = new PBEKeySpec(
SECRET_KEY.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 encrypted string
return Base64.getEncoder().encodeToString(
cipher.doFinal(strToEncrypt.getBytes(
StandardCharsets.UTF_8)));
}
catch (Exception e) {
System.out.println("Error while encrypting: "
+ e.toString());
}
return null;
}
// This method use to decrypt to string
public static String decrypt(String strToDecrypt)
{
try {
// Default byte array
byte[] iv = { 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 };
// Create IvParameterSpec object and assign with
// constructor
IvParameterSpec ivspec
= new IvParameterSpec(iv);
// Create SecretKeyFactory Object
SecretKeyFactory factory
= SecretKeyFactory.getInstance(
"PBKDF2WithHmacSHA256");
// Create KeySpec object and assign with
// constructor
KeySpec spec = new PBEKeySpec(
SECRET_KEY.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 decrypted string
return new String(cipher.doFinal(
Base64.getDecoder().decode(strToDecrypt)));
}
catch (Exception e) {
System.out.println("Error while decrypting: "
+ e.toString());
}
return null;
}
}
// driver code
public class Main {
public static void main(String[] args)
{
// Create String variables
String originalString = "GeeksforGeeks";
// Call encryption method
String encryptedString
= AES.encrypt(originalString);
// Call decryption method
String decryptedString
= AES.decrypt(encryptedString);
// Print all strings
System.out.println(originalString);
System.out.println(encryptedString);
System.out.println(decryptedString);
}
}
GeeksforGeeks
LuBu3DTLx7SLfjfhbjl7lw==
GeeksforGeeks
如果块没有适当的填充,则系统会显示密码错误。在允许Java AES 工作之前进行安全测试也很重要。 AES 使用输入数据、密钥和 IV.IV。密钥通过随机数生成或由密码驱动。对于安全最佳实践,该系统效果最佳。了解 AES 256 加密以对敏感数据使用数学代码非常重要。
AES的优势
- 它允许数据保持安全,直到它被秘密密钥泄露。
- 许多企业现在可以使用它来防止黑客扰乱信息。
- 对于需要以牢不可破的格式广告同时安全传输数据的机构来说,这是最灵活和可行的选择。
最早的AES被美国国家安全局批准使用。事实证明,它的速度与发送方和接收方的相同密钥以及它的长度是最有用的。分组密码仍然是替代置换组合的明星执行者。它还具有需要多次修改的圆形密钥的额外安全性。每个阶段/级别的加密都执行一项重要函数。更长的键和更多的回合确保高性能。