Java对称加密:手把手教你加密(如果不懂,请自行百度)

首先,让我们来谈谈对称加密。对称加密是指使用相同的密钥进行加密和解密的过程。简单来说,就像是一个锁,需要一把相同的钥匙才能打开它。由于这种方式很容易实现,所以在很多场合都被广泛应用。

接下来,我们将用Java来实现对称加密。我们选择AES算法,这是一种广泛应用的对称加密算法。首先,我们需要使用javax.crypto包中的密钥类来生成密钥。如下所示:

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {
    
    
	
	public static void main(String[] args) throws Exception {
    
    
		KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
		keyGenerator.init(128);
		
		SecretKey secretKey = keyGenerator.generateKey();
		byte[] keyBytes = secretKey.getEncoded();
		SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
	}
}

接下来,我们需要使用javax.crypto包中的加密器类来进行加密,如下所示:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {
    
    
	
	public static void main(String[] args) throws Exception {
    
    
		KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
		keyGenerator.init(128);
		
		SecretKey secretKey = keyGenerator.generateKey();
		byte[] keyBytes = secretKey.getEncoded();
		SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
		
		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		cipher.init(Cipher.ENCRYPT_MODE, keySpec);
		
		byte[] input = "Hello, world!".getBytes("UTF-8");
		byte[] encrypted = cipher.doFinal(input);
		
		System.out.println(new String(encrypted, "UTF-8"));
	}
}

在这个例子中,我们使用了AES算法,并且使用了ECB模式和PKCS5Padding填充方式。ECB是一种简单的模式,它将明文分成固定大小的数据块,并将每个数据块分别加密。PKCS5Padding是一种填充方式,它在明文末尾填充适当的字节,使明文长度为块长度的整数倍。

最后,我们需要使用相同的密钥和解密器类来进行解密,如下所示:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

public class SymmetricEncryption {
    
    

	public static void main(String[] args) throws Exception {
    
    
		KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
		keyGenerator.init(128);
	
		SecretKey secretKey = keyGenerator.generateKey();
		byte[] keyBytes = secretKey.getEncoded();
		SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
	
		Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
		cipher.init(Cipher.ENCRYPT_MODE, keySpec);
	
		byte[] input = "Hello, world!".getBytes("UTF-8");
		byte[] encrypted = cipher.doFinal(input);
	
		cipher.init(Cipher.DECRYPT_MODE, keySpec);
		byte[] decrypted = cipher.doFinal(encrypted);
	
		System.out.println(new String(decrypted, "UTF-8"));
	}
}

在这个例子中,我们首先使用相同的密钥生成器来生成相同的密钥。然后,我们使用相同的加密器类和密钥对明文进行加密,并将加密后的密文作为输入传递给解密器类。因为我们使用相同的密钥,所以解密器类可以正确地解密密文,并且输出明文。

好啦,这就是Java对称加密的简单实现。希望这篇文章能够帮助你理解Java对称加密的操作过程。我们为什么要使用加密呢?因为我们常常需要将敏感信息进行保护,避免信息泄露。那么,下次有需要的时候,就有手把手的示例代码参考啦!

猜你喜欢

转载自blog.csdn.net/heihaozi/article/details/129920898