分享Java常用几种加密算法(四种)
前言
随着互联网的发展,网络安全问题越来越受到重视,数据的安全性也越来越得到关注,特别是对于一些交易、存储的敏感数据。在这样的背景下,加密算法逐渐被广泛应用于数据的加密、解密、防篡改等安全领域。Java作为一种流行的编程语言,提供了许多常用的加密算法,本文将介绍Java常用的四种加密算法。
对称加密算法
对称加密算法是指加密和解密使用同一密钥的加密算法。这种加密算法的缺点是密钥的传输问题,如果密钥被攻击者获取,整个加密过程就会被破解。因此,对于对称加密算法,保证密钥的安全至关重要。
1. DES 加密算法
代码示例:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class DesEncryptor {
private static final String DES_ALGORITHM = "DESede/ECB/PKCS5Padding";
/**
* 使用DES加密数据
* @param plainText 待加密的明文
* @param secretKey 密钥
* @return 加密后的数据
*/
public static String encrypt(String plainText, String secretKey) throws Exception {
SecretKey desKey = KeyGenerator.getInstance("DESede").generateKey();
Cipher cipher = Cipher.getInstance(DES_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(secretKey.getBytes(), "DES"));
byte[] encryptBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptBytes);
}
/**
* 使用DES解密数据
* @param encryptText 待解密的密文
* @param secretKey 密钥
* @return 解密后的数据
*/
public static String decrypt(String encryptText, String secretKey) throws Exception {
byte[] encryptBytes = Base64.getDecoder().decode(encryptText);
Cipher cipher = Cipher.getInstance(DES_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey.getBytes(), "DES"));
byte[] decryptBytes = cipher.doFinal(encryptBytes);
return new String(decryptBytes);
}
}
2. AES 加密算法
代码示例:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AesEncryptor {
private static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding";
/**
* 使用AES加密数据
* @param plainText 待加密的明文
* @param secretKey 密钥
* @return 加密后的数据
*/
public static String encrypt(String plainText, String secretKey) throws Exception {
SecretKey aesKey = KeyGenerator.getInstance("AES").generateKey();
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(secretKey.getBytes(), "AES"));
byte[] encryptBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptBytes);
}
/**
* 使用AES解密数据
* @param encryptText 待解密的密文
* @param secretKey 密钥
* @return 解密后的数据
*/
public static String decrypt(String encryptText, String secretKey) throws Exception {
byte[] encryptBytes = Base64.getDecoder().decode(encryptText);
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(secretKey.getBytes(), "AES"));
byte[] decryptBytes = cipher.doFinal(encryptBytes);
return new String(decryptBytes);
}
}
非对称加密算法
非对称加密算法是一种加密和解密使用不同密钥的加密算法,比如常见的 RSA 加密。
3. RSA 加密算法
代码示例:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
import java.util.Base64;
public class RsaEncryptor {
private static final String RSA_ALGORITHM = "RSA/ECB/PKCS1Padding";
/**
* 使用RSA加密数据
* @param plainText 待加密的明文
* @return 加密后的数据
*/
public static String encrypt(String plainText) throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptBytes = cipher.doFinal(plainText.getBytes());
return Base64.getEncoder().encodeToString(encryptBytes);
}
/**
* 使用RSA解密数据
* @param encryptText 待解密的密文
* @return 解密后的数据
*/
public static String decrypt(String encryptText) throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
byte[] encryptBytes = Base64.getDecoder().decode(encryptText);
Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptBytes = cipher.doFinal(encryptBytes);
return new String(decryptBytes);
}
}
消息摘要算法
消息摘要算法是一种将任意长度的消息转换成固定长度(通常比较短)摘要或消息认证码的算法。
4. MD5 加密算法
代码示例:
import java.security.MessageDigest;
import java.util.Base64;
public class Md5Encryptor {
/**
* 使用MD5加密数据
* @param plainText 待加密的明文
* @return 加密后的数据
*/
public static String encrypt(String plainText) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(plainText.getBytes());
return Base64.getEncoder().encodeToString(bytes);
}
}
总结
本文介绍了Java常用的四种加密算法,分别是DES加密算法、AES加密算法、RSA加密算法和MD5加密算法。这些算法都有其应用场景和特点,在实际开发中可以根据业务需求进行选择使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:分享Java常用几种加密算法(四种) - Python技术站