Java中的加密函数-数据加密与解密的函数集合
发布时间:2023-06-23 21:17:28
Java中的加密函数是一组数据加密和解密的函数集合,在Java开发中应用广泛。本文将为您介绍Java中加密函数的基本原理、加密方式以及应用实例。
一、加密函数的基本原理
加密函数主要是通过各种算法,将明文转化成密文,从而使得通信双方都可以保证数据的安全性。Java中常见的加密方式包括对称加密和非对称加密,其中对称加密采用相同的密钥进行加密和解密,而非对称加密则使用不同的密钥进行加密和解密。
二、对称加密的实现
1. DES加密
DES加密是一种对称密钥加密算法,其主要实现方式为:
public static byte[] encryptDES(byte[] srcData, byte[] keyValue) {
try {
// 生成密钥
SecretKey key = new SecretKeySpec(keyValue, ALGORITHM);
// 加密
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(srcData);
return result;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
2. AES加密
AES加密是一种高级加密标准,其主要实现方式为:
public static byte[] encryptAES(byte[] srcData, byte[] keyValue) {
try {
// 生成密钥
SecretKey key = new SecretKeySpec(keyValue, ALGORITHM);
// 加密
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(srcData);
return result;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
三、非对称加密的实现
1. RSA加密
RSA加密是一种非对称加密算法,其主要实现方式为:
public static byte[] encryptRSA(byte[] srcData, PublicKey publicKey) {
try {
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] result = cipher.doFinal(srcData);
return result;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
2. DSA加密
DSA加密是一种数字签名算法,其主要实现方式为:
public static byte[] encryptDSA(byte[] srcData, PrivateKey privateKey) {
try {
Signature signature = Signature.getInstance(CIPHER_ALGORITHM);
signature.initSign(privateKey);
signature.update(srcData);
byte[] result = signature.sign();
return result;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
四、应用实例
Java中的加密函数在实际应用中也有着广泛的用途。例如在数字签名、用户名密码加密传输等场景中,都需要采用Java的加密函数进行实现。
public class EncryptUtil {
public static final String ENCODE = "UTF-8";
public static final String ALGORITHM_RSA = "RSA";
public static final String ALGORITHM_DSA = "DSA";
public static final String ALGORITHM_DES = "DES";
public static final String ALGORITHM_AES = "AES";
public static final String SIGNATURE_ALGORITHM = "MD5withRSA";
public static final String TRANSFORMATION_RSA = "RSA/ECB/PKCS1Padding";
public static final String TRANSFORMATION_AES = "AES/ECB/PKCS5Padding";
public static final String TRANSFORMATION_DES = "DES/ECB/PKCS5Padding";
//RSA加密
public static String encryptRSA(String srcData, PublicKey publicKey) {
byte[] resultBytes = encryptRSA(srcData.getBytes(), publicKey);
return Base64.getEncoder().encodeToString(resultBytes);
}
//RSA解密
public static String decryptRSA(String srcData, PrivateKey privateKey) {
try {
byte[] resultBytes = Base64.getDecoder().decode(srcData);
byte[] data = decryptRSA(resultBytes, privateKey);
return new String(data, ENCODE);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//DSA加密
public static String encryptDSA(String srcData, PrivateKey privateKey) {
byte[] resultBytes = encryptDSA(srcData.getBytes(), privateKey);
return Base64.getEncoder().encodeToString(resultBytes);
}
//DSA解密
public static String decryptDSA(String srcData, PublicKey publicKey) {
try {
byte[] resultBytes = Base64.getDecoder().decode(srcData);
byte[] data = decryptDSA(resultBytes, publicKey);
return new String(data, ENCODE);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//MD5数字签名
public static String signMD5(String srcData, PrivateKey privateKey) {
byte[] signData = signMD5(srcData.getBytes(), privateKey);
return Base64.getEncoder().encodeToString(signData);
}
//MD5数字验签
public static boolean verifyMD5(String srcData, PublicKey publicKey, String signData) {
byte[] srcBytes = srcData.getBytes();
byte[] signBytes = Base64.getDecoder().decode(signData);
return verifyMD5(srcBytes, publicKey, signBytes);
}
//DES加密
public static String encryptDES(String srcData, String key) {
byte[] resultBytes = encryptDES(srcData.getBytes(), key.getBytes());
return Base64.getEncoder().encodeToString(resultBytes);
}
//DES解密
public static String decryptDES(String srcData, String key) {
try {
byte[] resultBytes = Base64.getDecoder().decode(srcData);
byte[] data = decryptDES(resultBytes, key.getBytes());
return new String(data, ENCODE);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//AES加密
public static String encryptAES(String srcData, String key) {
byte[] resultBytes = encryptAES(srcData.getBytes(), key.getBytes());
return Base64.getEncoder().encodeToString(resultBytes);
}
//AES解密
public static String decryptAES(String srcData, String key) {
try {
byte[] resultBytes = Base64.getDecoder().decode(srcData);
byte[] data = decryptAES(resultBytes, key.getBytes());
return new String(data, ENCODE);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
通过以上代码示例,我们可以看出Java中的加密函数十分灵活可靠,可以为我们的安全通信提供有力保障。
