Java中常用的加密函数及其解密方法
发布时间:2023-06-10 09:36:22
Java作为一种常见的编程语言,经常需要处理加密和解密的操作。加密算法可以保护敏感数据或信息的隐私性和完整性,而解密算法则是把加密后的数据还原成原始的明文数据。下面列出Java中常用的加密函数及其解密方法。
1. MD5加密
MD5是一种常见的加密算法,通过对数据进行摘要处理,生成一个128位的散列值。Java内置了MessageDigest类,可以使用该类中的getInstance方法来获取MD5实例。常用的加密方法如下:
public static String encrypt(String data) {
String result = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(data.getBytes());
StringBuffer sb = new StringBuffer();
for (byte b : bytes) {
int i = b & 0xff;
if (i < 0xf) {
sb.append(0);
}
sb.append(Integer.toHexString(i));
}
result = sb.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return result;
}
对于MD5加密的数据,由于它是不可逆的,因此没有通用的解密方法。
2. AES加密
AES是一种对称加密算法,它可以对数据进行加密和解密,使用同一个密钥进行加密和解密操作。Java内置了Cipher类可以用于AES加密和解密操作。常用的加密和解密方法如下:
public static String encrypt(String data, String key) {
String result = "";
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(key.getBytes());
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] bytes = cipher.doFinal(data.getBytes());
result = Base64.getEncoder().encodeToString(bytes);
} catch (NoSuchPaddingException | NoSuchAlgorithmException | InvalidAlgorithmParameterException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
e.printStackTrace();
}
return result;
}
public static String decrypt(String data, String key) {
String result = "";
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(key.getBytes());
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] bytes = Base64.getDecoder().decode(data);
result = new String(cipher.doFinal(bytes));
} catch (NoSuchPaddingException | NoSuchAlgorithmException | InvalidAlgorithmParameterException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
e.printStackTrace();
}
return result;
}
3. RSA加密
RSA是一种公钥加密算法,可以实现公私钥的加密和解密操作。Java内置了KeyPairGenerator和Cipher类可以用于RSA加密和解密操作。常用的加密和解密方法如下:
public static Map<String, Object> generateKeyPair() {
Map<String, Object> keyMap = new HashMap<String, Object>();
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
keyMap.put("privateKey", privateKey);
keyMap.put("publicKey", publicKey);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return keyMap;
}
public static byte[] encrypt(byte[] data, PublicKey publicKey) {
byte[] result = null;
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
result = cipher.doFinal(data);
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
e.printStackTrace();
}
return result;
}
public static byte[] decrypt(byte[] data, PrivateKey privateKey) {
byte[] result = null;
try {
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
result = cipher.doFinal(data);
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) {
e.printStackTrace();
}
return result;
}
以上是Java中常用的加密函数及其解密方法,对于不同的加密算法,我们可以根据需求选择合适的加密函数。对于需要保证数据隐私性和完整性的场景,我们可以使用以上算法进行加密处理。
