利用Java实现常用的加密和解密函数
发布时间:2023-06-03 16:19:07
Java提供了多种加密和解密算法,可以通过Java内置的API来使用它们。以下是最常用的加密和解密算法及其实现方式:
1. BASE64加密/解密
BASE64是一种将二进制数据编码成ASCII字符的方法,常用于在邮件传输、网络传输以及代码表达中。在Java中,可以使用Base64类来实现BASE64编码和解码。Base64类有两种编码方式:Basic和URL,并且可以选择是否进行URL和MIME编码。
示例代码:
import java.util.Base64;
public class Base64Test {
public static void main(String[] args) {
String input = "hello world";
String encoded = Base64.getEncoder().encodeToString(input.getBytes());
System.out.println(encoded); // aGVsbG8gd29ybGQ=
byte[] decoded = Base64.getDecoder().decode(encoded);
System.out.println(new String(decoded)); // hello world
}
}
2. MD5加密
MD5是一种常用的不可逆加密算法,可以将任意长度的数据加密成一个固定长度的摘要。在Java中,可以使用MessageDigest类来实现MD5加密。
示例代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Test {
public static void main(String[] args) throws NoSuchAlgorithmException {
String input = "hello world";
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hashed = md.digest(input.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : hashed) {
sb.append(String.format("%02x", b));
}
System.out.println(sb.toString()); // 5eb63bbbe01eeed093cb22bb8f5acdc3
}
}
3. SHA-1加密
SHA-1是一种比MD5更安全的不可逆加密算法,同样可以将任意长度的数据加密成一个固定长度的摘要。在Java中,可以使用MessageDigest类来实现SHA-1加密。
示例代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA1Test {
public static void main(String[] args) throws NoSuchAlgorithmException {
String input = "hello world";
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] hashed = md.digest(input.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : hashed) {
sb.append(String.format("%02x", b));
}
System.out.println(sb.toString()); // 2ef7bde608ce5404e97d5f042f95f89f1c232871
}
}
4. DES加密/解密
DES是一种对称加密算法,可以实现加密和解密。在Java中,可以使用javax.crypto包中的Cipher类来实现DES加密和解密。Cipher类有多种加密和解密模式,如ECB、CBC、CFB、OFB等。
示例代码:
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
public class DestTest {
public static void main(String[] args) throws Exception {
String input = "hello world";
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
SecretKey key = keyGen.generateKey();
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal(input.getBytes());
System.out.println(new String(encrypted)); // 某一随机字符串
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println(new String(decrypted)); // hello world
}
}
5. RSA加密/解密
RSA是一种非对称加密算法,可以实现加密和解密。在Java中,可以使用javax.crypto包中的Cipher类来实现RSA加密和解密。需要注意的是,在RSA加密和解密中,需要获取公钥和私钥,可以使用KeyPairGenerator类来生成。
示例代码:
import javax.crypto.Cipher;
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.PublicKey;
import java.security.PrivateKey;
public class RsaTest {
public static void main(String[] args) throws Exception {
String input = "hello world";
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair keyPair = keyGen.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encrypted = cipher.doFinal(input.getBytes());
System.out.println(new String(encrypted)); // 某一随机字符串
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decrypted = cipher.doFinal(encrypted);
System.out.println(new String(decrypted)); // hello world
}
}
总结:
通过Java内置的API,可以轻松实现常用的加密和解密算法,如BASE64、MD5、SHA-1、DES和RSA。根据具体需求,可以选择不同的加密算法和加密模式来保障数据的安全性。
