在信息化时代,数据安全至关重要。Java作为一门强大的编程语言,提供了多种加密字符串的方法,可以帮助我们保护敏感信息。以下是一些简单实用的方法,让你轻松掌握Java加密字符串的技巧。
一、使用Java内置的java.util.Base64
java.util.Base64是Java 8及以上版本提供的一个简单类,用于实现Base64编码和解码。Base64编码并不是一种安全的加密方法,但可以用于将二进制数据转换为文本格式,以便于存储或传输。
1. 编码字符串
import java.util.Base64;
public class Base64Example {
public static void main(String[] args) {
String originalString = "Hello, World!";
String encodedString = Base64.getEncoder().encodeToString(originalString.getBytes());
System.out.println("Encoded String: " + encodedString);
}
}
2. 解码字符串
import java.util.Base64;
public class Base64Example {
public static void main(String[] args) {
String encodedString = "SGVsbG8sIFdvcmxkIQ==";
String decodedString = new String(Base64.getDecoder().decode(encodedString));
System.out.println("Decoded String: " + decodedString);
}
}
二、使用java.security.MessageDigest
MessageDigest类可以用于生成信息摘要,如MD5、SHA-1和SHA-256等。这些摘要函数可以用于校验数据的完整性,但不适合用作安全的加密。
1. 使用MD5
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Example {
public static void main(String[] args) {
String originalString = "Hello, World!";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(originalString.getBytes());
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
System.out.println("MD5: " + sb.toString());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
2. 使用SHA-256
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA256Example {
public static void main(String[] args) {
String originalString = "Hello, World!";
try {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(originalString.getBytes());
byte[] digest = md.digest();
StringBuilder sb = new StringBuilder();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
System.out.println("SHA-256: " + sb.toString());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
三、使用对称加密算法(如AES)
对称加密算法使用相同的密钥进行加密和解密。AES是一种广泛使用的对称加密算法。
1. 加密字符串
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AESEncryptionExample {
public static void main(String[] args) {
try {
// 生成密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
// 加密字符串
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);
String originalString = "Hello, World!";
byte[] encryptedBytes = cipher.doFinal(originalString.getBytes());
System.out.println("Encrypted String: " + new String(encryptedBytes));
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. 解密字符串
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class AESDecryptionExample {
public static void main(String[] args) {
try {
// 生成密钥
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128);
SecretKey secretKey = keyGenerator.generateKey();
byte[] keyBytes = secretKey.getEncoded();
SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES");
// 解密字符串
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
String encryptedString = "U29tZSBvdGhlciB3b3JrcyBhIHdvcmxkIQ==";
byte[] encryptedBytes = new String(Base64.getDecoder().decode(encryptedString)).getBytes();
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
System.out.println("Decrypted String: " + new String(decryptedBytes));
} catch (Exception e) {
e.printStackTrace();
}
}
}
四、使用非对称加密算法(如RSA)
非对称加密算法使用一对密钥:公钥和私钥。公钥用于加密,私钥用于解密。
1. 生成密钥对
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
public class RSAKeyPairExample {
public static void main(String[] args) {
try {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PublicKey publicKey = keyPair.getPublic();
PrivateKey privateKey = keyPair.getPrivate();
System.out.println("Public Key: " + publicKey);
System.out.println("Private Key: " + privateKey);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
}
2. 使用公钥加密
”`java import javax.crypto.Cipher; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PublicKey; import java.security.spec.X509EncodedKeySpec;
public class RSAEncryptionExample {
public static void main(String[] args) {
try {
String publicKeyPEM = "-----BEGIN PUBLIC KEY-----\n" +
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr6B5Rc6s7V0\n" +
"V9wz0L7Gy1Ry0L6Lz3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3\n" +
"G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7\n" +
"Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3\n" +
"R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6\n" +
"H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3\n" +
"G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7Y5R6H3G6V3R6R3G7
