Java中常用的加密解密函数介绍
发布时间:2023-06-19 16:02:35
Java是一种常用的编程语言,因其安全性高、可移植性强、跨平台支持等特点,在网络和软件开发中广泛应用。在网络通信和数据存储过程中,数据的加密解密是非常关键的一部分。Java中提供了许多加密解密函数,本文主要介绍常用的几种加密解密函数。
1. MD5加密
MD5是一种常用的哈希加密算法,可以将任意长度的数据“压缩”成一个128位(16字节)的数字指纹。Java中提供了MessageDigest类来实现MD5加密:
public String md5(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(str.getBytes("utf-8"));
return bytesToHex(bytes);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static String bytesToHex(byte[] bytes) {
StringBuffer result = new StringBuffer();
for (byte b : bytes) {
result.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
}
return result.toString();
}
2. SHA-1加密
SHA-1是一种哈希加密算法,可以将任意长度的数据“压缩”成一个160位的数字指纹。Java中同样提供了MessageDigest类来实现SHA-1加密:
public String sha1(String str) {
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] bytes = md.digest(str.getBytes("utf-8"));
return bytesToHex(bytes);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
3. Base64编码
Base64是一种用64个字符来表示任意二进制数据的编码方式,常用于传输8位字节代码的场合。Java中提供了Base64类来实现Base64编解码:
public String base64Encode(String str) {
try {
byte[] bytes = str.getBytes("utf-8");
return Base64.getEncoder().encodeToString(bytes);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String base64Decode(String str) {
try {
byte[] bytes = Base64.getDecoder().decode(str);
return new String(bytes, "utf-8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
4. DES加密解密
DES是一种对称加密算法,加密和解密使用相同的密钥。Java中提供了DES算法的实现类:
public String desEncrypt(String key, String str) {
try {
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes("utf-8"), "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
return Base64.getEncoder().encodeToString(bytes);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String desDecrypt(String key, String str) {
try {
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes("utf-8"), "DES");
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] bytes = Base64.getDecoder().decode(str);
bytes = cipher.doFinal(bytes);
return new String(bytes, "utf-8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
5. RSA加密解密
RSA是一种非对称加密算法,加密和解密使用不同的密钥。Java中提供了RSA算法的实现类:
public Map<String, String> generateKey() {
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
Map<String, String> keys = new HashMap<>();
keys.put("publicKey", Base64.getEncoder().encodeToString(publicKey.getEncoded()));
keys.put("privateKey", Base64.getEncoder().encodeToString(privateKey.getEncoded()));
return keys;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String rsaEncrypt(String publicKeyStr, String str) {
try {
byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyStr);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] bytes = cipher.doFinal(str.getBytes("utf-8"));
return Base64.getEncoder().encodeToString(bytes);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public String rsaDecrypt(String privateKeyStr, String str) {
try {
byte[] privateKeyBytes = Base64.getDecoder().decode(privateKeyStr);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] bytes = Base64.getDecoder().decode(str);
bytes = cipher.doFinal(bytes);
return new String(bytes, "utf-8");
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
以上就是Java中常用的加密解密函数的介绍和示例代码,不同的加密解密算法有不同的应用场景,在具体的开发中需要根据实际情况选择合适的算法。
