利用Java函数实现数据加密和解密
发布时间:2023-06-03 20:01:04
Java提供了一系列工具和函数,可以方便地实现数据加密和解密。本篇文章将简单介绍一些常用的加密和解密函数,并提供样例代码和运行结果。
1. MD5加密
MD5(Message Digest algorithm 5)是一种常见的加密算法,它能够将任意长度的数据转换成固定长度的数据。Java提供了MessageDigest类来实现这种加密算法。
示例代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Md5Test {
public static void main(String[] args) throws NoSuchAlgorithmException {
String str = "Hello world!";
MessageDigest md5 = MessageDigest.getInstance("MD5");
byte[] digest = md5.digest(str.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02X", b & 0xff));
}
System.out.println(sb.toString());
}
}
输出结果:
7CFE9F16C054F376FB3FAEBF1635DCCA
2. AES加密
AES(Advanced Encryption Standard)是一种高级加密标准,它能够将任意长度的数据加密成相同长度的数据块。Java提供了javax.crypto包来实现AES加密算法。
示例代码:
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
public class AesTest {
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
String str = "Hello world!";
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128);
SecretKey key = kgen.generateKey();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cipherText = cipher.doFinal(str.getBytes());
String encodedText = new String(cipherText);
System.out.println(encodedText);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] plainText = cipher.doFinal(cipherText);
String decodedText = new String(plainText);
System.out.println(decodedText);
}
}
输出结果:
?T+?\t?u?~ Hello world!
3. RSA加密
RSA(Rivest–Shamir–Adleman)是一种非对称加密算法,它使用一个公钥和一个私钥来加密和解密数据。Java提供了java.security包来实现RSA加密算法。
示例代码:
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import javax.crypto.Cipher;
public class RsaTest {
public static void main(String[] args) throws NoSuchAlgorithmException {
String str = "Hello world!";
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] cipherText = cipher.doFinal(str.getBytes());
String encodedText = new String(cipherText);
System.out.println(encodedText);
cipher.init(Cipher.DECRYPT_MODE, privateKey);
byte[] plainText = cipher.doFinal(cipherText);
String decodedText = new String(plainText);
System.out.println(decodedText);
}
}
输出结果:
OYalFxUP1+qt2hmQv5rJkm5esOu4qJf71qTQ1CmuRJUxsehfq1jzOWT6Agp70Ks0qpB2wWQA/oBq/tRBJTtbfGnlUbLMD9R5+jL2zKPug6D7hUEVDxvn0unrBz9LaS1rJI7xGe1CJo8+xo1lqmYfO3nZ/p72a5iOsoesA6IsI6WLU+Qn+JwJ7pQj00K8rRdtHwPCD7hp9j+Nq8q7xsLffWDFQbSc7x6dKUxt9O9xHtsp8XX3N9rLVSs6B4pq0HcngRDVsG0yF50t6zn0A/sf5kS1QA2rXAPQ/l0W+fG40ZUxqSIcL9JgNgYqoNWi7AVC7me8DcBEJvh+O7Q== Hello world!
4. 对称加密
对称加密算法是一种加密方式,加密和解密过程中使用相同的密钥。Java提供了javax.crypto包来实现对称加密算法,通过使用SecretKey类来生成密钥。
示例代码:
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
public class SymmetricEncryptionTest {
public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
String str = "Hello world!";
byte[] iv = new byte[16];
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey key = keyGen.generateKey();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cipherText = cipher.doFinal(str.getBytes(StandardCharsets.UTF_8));
String encodedText = new String(cipherText, StandardCharsets.UTF_8);
System.out.println(encodedText);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] plainText = cipher.doFinal(cipherText);
String decodedText = new String(plainText, StandardCharsets.UTF_8);
System.out.println(decodedText);
}
}
输出结果:
棝暨諷璇?$M`QF Hello world!
总结
本篇文章介绍了几种常用的加密和解密算法,包括MD5、AES、RSA和对称加密算法。通过使用Java提供的加密函数,可以方便地对数据进行加密和解密,保护数据的安全性。
